From dad922cafd3556a95108cfd4f2d06a663471489b Mon Sep 17 00:00:00 2001 From: valerpan Date: Thu, 30 Jul 2026 14:11:15 +0300 Subject: [PATCH] Unit-develop commit --- .idea/compiler.xml | 13 +++ .idea/jarRepositories.xml | 20 +++++ .idea/misc.xml | 12 +++ .idea/vcs.xml | 3 +- .idea/workspace.xml | 85 ++++++++++++++++++ pom.xml | 6 ++ src/main/java/Main.java | 7 +- src/main/java/model/Calculator.java | 21 ++++- src/test/java/NegativeCalculatorTest.java | 43 +++++++++ src/test/java/PositiveCalculatorTest.java | 38 ++++++++ target/classes/Main.class | Bin 0 -> 1040 bytes target/classes/model/Calculator.class | Bin 0 -> 2467 bytes .../classes/model/CalculatorException.class | Bin 0 -> 1069 bytes .../test-classes/NegativeCalculatorTest.class | Bin 0 -> 1697 bytes .../test-classes/PositiveCalculatorTest.class | Bin 0 -> 2114 bytes 15 files changed, 243 insertions(+), 5 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/workspace.xml create mode 100644 target/classes/Main.class create mode 100644 target/classes/model/Calculator.class create mode 100644 target/classes/model/CalculatorException.class create mode 100644 target/test-classes/NegativeCalculatorTest.class create mode 100644 target/test-classes/PositiveCalculatorTest.class diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..8bd7227 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..f88c0a7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 07a289c..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,7 +1,6 @@ - - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..0f8333f --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + { + "customColor": "", + "associatedIndex": 6 +} + + + + + + + + + + + + + + + + + + + + + + 1785351688906 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index a130341..7b01e3e 100644 --- a/pom.xml +++ b/pom.xml @@ -23,5 +23,11 @@ + + org.testng + testng + 7.10.2 + test + \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 9b56d81..6f564d6 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -10,6 +10,11 @@ public class Main { private static String[] readParams() { // todo: считать из консоли данные, затем вернуть их в виде массива строк - return null; + Scanner in = new Scanner(System.in); + + String operator = in.nextLine(); + String value1 = in.nextLine(); + String value2 = in.nextLine(); + return new String[]{operator, value1, value2}; } } diff --git a/src/main/java/model/Calculator.java b/src/main/java/model/Calculator.java index a7050eb..18517d0 100644 --- a/src/main/java/model/Calculator.java +++ b/src/main/java/model/Calculator.java @@ -7,8 +7,10 @@ public class Calculator { double value1; double value2; // todo: доработать код, чтобы все негативные тесты проходили успешно - value1 = Double.parseDouble(params[1]); - value2 = Double.parseDouble(params[2]); + //value1 = Double.parseDouble(params[1]); + //value2 = Double.parseDouble(params[2]); + value1 = validDouble(params[1]); + value2 = validDouble(params[2]); double result = calculate(operator, value1, value2); if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { throw new CalculatorException("Превышен порог значений"); @@ -17,6 +19,9 @@ public class Calculator { } private static double calculate(String operator, double a, double b) { + if (operator == null) { + throw new CalculatorException("Оператор не может быть null"); + } switch (operator) { case "+": return add(a, b); @@ -48,4 +53,16 @@ public class Calculator { private static double mult(double a, double b) { return a * b; } + + private static double validDouble (String number) throws CalculatorException{ + if (number == null) { + throw new CalculatorException("Число не может быть null"); + } + try{ + return Double.parseDouble(number); + } + catch (NumberFormatException e){ + throw new CalculatorException("Некорректное число: " + number, e); + } + } } diff --git a/src/test/java/NegativeCalculatorTest.java b/src/test/java/NegativeCalculatorTest.java index 9be4aec..db8220a 100644 --- a/src/test/java/NegativeCalculatorTest.java +++ b/src/test/java/NegativeCalculatorTest.java @@ -1,4 +1,47 @@ +import model.Calculator; +import model.CalculatorException; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + public class NegativeCalculatorTest { // todo: @DataProvider for negativeData // todo: negative test + @DataProvider + public Object[][] negativeData(){ + return new Object [][]{ + {"+", String.valueOf(Integer.MAX_VALUE), "1"}, + {"+", String.valueOf(Integer.MIN_VALUE), "-1"}, + {"*", String.valueOf(Integer.MAX_VALUE), "2"}, + + {"/", "10", "0"}, + + {"+", "", "5"}, + {"-", "3", ""}, + {"*", "", ""}, + + {"+", "abc", "5"}, + {"-", "3", "xyz"}, + {"*", "12.5a", "3"}, + {"/", "4", "2.3.5"}, + + {"+", "@#$", "5"}, + {"-", "3", "!@#"}, + + {"+", " ", "5"}, + {"-", "3", " "}, + + {"", "10", "5"}, + {"=", "5", "3"}, + + {null, "5", "3"}, + {"+", null, "3"}, + }; + } + + @Test (dataProvider = "negativeData", expectedExceptions = CalculatorException.class) + public void negativeTest(String operator, String a, String b){ + String[] params = {operator, a, b}; + Calculator.execute(params); + } } diff --git a/src/test/java/PositiveCalculatorTest.java b/src/test/java/PositiveCalculatorTest.java index ce88925..b7f0f6e 100644 --- a/src/test/java/PositiveCalculatorTest.java +++ b/src/test/java/PositiveCalculatorTest.java @@ -1,4 +1,42 @@ +import model.Calculator; +import org.testng.Assert; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + public class PositiveCalculatorTest { // todo: @DataProvider for positiveData // todo: positive test + @DataProvider + public Object[][] positiveData(){ + return new Object [][]{ + {"+", "3", "4", 7.0}, + {"+", "10.5", "2.3", 12.8}, + {"+", "-5.5", "3.2", -2.3}, + + {"-", "10", "5", 5.0}, + {"-", "15.7", "3.2", 12.5}, + {"-", "-2.5", "-1.5", -1.0}, + + {"*", "3", "0", 0.0}, + {"*", "2.5", "4.0", 10.0}, + {"*", "-3.0", "2.5", -7.5}, + + {"/", "10", "2", 5.0}, + {"/", "15.0", "4.0", 3.75}, + {"/", "-10.0", "4.0", -2.5}, + + + {"+", String.valueOf(Integer.MAX_VALUE - 1), "1", (double)Integer.MAX_VALUE}, + {"+", String.valueOf(Integer.MIN_VALUE + 1), "-1", (double)Integer.MIN_VALUE}, + {"*", String.valueOf(Integer.MAX_VALUE), "1", (double)Integer.MAX_VALUE}, + }; + } + + @Test(dataProvider = "positiveData") + public void positiveTest(String operator, String a, String b, double expected){ + String[] params = {operator, a, b}; + double result = Double.parseDouble(Calculator.execute(params)); + Assert.assertEquals(result, expected, 0.001); + } + } \ No newline at end of file diff --git a/target/classes/Main.class b/target/classes/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..33a2be2a916c8e30883f2b87b2edf9407b0df98a GIT binary patch literal 1040 zcmZuwT~8B16g|_HF0BhKEv*P@!7us&RPfs(K9HCg3X-g8()cu#2`<@gn`M{avwui= z0HVqw_1JzMVwhYA0)&4)}j z_3Ji>?uM^i94Tyz_tHC{e}07SWa$t3A|L5@StfFi_xj3IGg$y|Z=xDV^eq)*lOO%@~^+h(qXZ=DNaNoqxgqSoIv@JB=8R5MJ{Tk7=8c16Hxd zT?$V)84-Ak-kLOX0i$_}iP{D7XSg+_nPfD81H|Z)glf8C1i>>r=Ptofc|nVr>!BGC zf8}|Cx3!-rwNJ5dj)z;-GnAWp+1ATW@)wrc@tW06ELrWbW$PQ=quh(k8<-$n23dXu p4%IAjVeo1gaGt&Ql0I3?;T2vpXn|=pXvOF`g>_n5rZ*wy#y_gJ-Q@rP literal 0 HcmV?d00001 diff --git a/target/classes/model/Calculator.class b/target/classes/model/Calculator.class new file mode 100644 index 0000000000000000000000000000000000000000..9fa2e9a5df8c583ecca8291c11d2039afe8dda61 GIT binary patch literal 2467 zcmai0TXz#x6#gccnUGA=n%?Eo0MaHYG^Ie11}m2URs&UAi-5OjGPHp-3Aq#=g%@?< zJL&>m%NJZeSU}qbkW`*r%csdN(7)k>*6*BzwzP4PtTX5AJ^Sqa?Y+Nql0W`^R0gmg z*W9qduEC+h2~|PUC1chIr;PMecy#iT880YM4=2;f!mt8+AUNTM3!5~!b$FoDd?u4H zQ{m%ADqc((g-lL?XVyq16VXg@GG!`g4a8PGjumpr^i(7m6<)kL8quU+Q@pmB*6nqy zqtReggHORrtByv}1#`;GsYm}@US9qUP@n$AZ1~a8p`dd;s1w)XX10*bq+NJf!EWoj z%BR-6^`LUI@;T=xerw4pQ&qNp_FIeA6YE~(GoiOi);L4!igdxRVY`kU z*!f%mtLZAxSdpSRdQo_Y1~=Bjg*rcxqmkB$I>3S84he)>2YAzL)!Lazd)S6J-P(T6ZwXkIBAsr)Zwi>)vyowh5dUvCUBOmFtS-Q&1&wc!}X2is6~tj z7w2@G#|8Ggkav~9*Iy5mMf~X2y#JZtV$NSQGEr4X{zg%CJYq3_Uj2 z*}<$cSuNZm_gJQwi<>8tqEL;iH({S354Q7c*yPpZ0?!LnK0l@$=B#jbh8CgR z=fZ|h_!O@JI}AScssSbur?d$PnAC{PPwB|Tc{pSrh=m*jC1@idrXtTsgRR2WGfZk)~}kY|C`z)R588Ww+Z! zGH!ACSJP4Uaf<*@4*gyO`HBD;8gkkO)lTOEx_{(bumC`aBg}D%qlZK24%X(golak9 z0lUA(pnXuii+;-eQtoyL*-v>u%56>|H&Na%WmO$iTU8O|0EhSxB(`$w;&YtWa;Zm# zYLg^%$N)5;wFqFN7vAF=y-cn5()$80yy|OS&epK_0^VESz$41Dh!acQfsF83Es$3x z9wtBfS)hS6zI`hQeKmxFL3Su!Lgf$4MyQw9Lmgb>u3p0Y-@?SjG5Uf~#o6p%;oV8e zyAs}*iwWS5F-q|7_}*Q>IEgjBfcJYB@xc;NczG-vt^cUfqVZJ$n793qc l(!wK=L!SE>4Fw(?$lhwOdHLt&G>TL>_`02AmTMcX{s&48KREyZ literal 0 HcmV?d00001 diff --git a/target/classes/model/CalculatorException.class b/target/classes/model/CalculatorException.class new file mode 100644 index 0000000000000000000000000000000000000000..2a16de772992c6750bcfb716ff0132779dad6f48 GIT binary patch literal 1069 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 KUr-dlm;VB4IL%4` literal 0 HcmV?d00001