From fc35f720efd20fc857ebb7586dbda4794ccdd9f4 Mon Sep 17 00:00:00 2001 From: sanguk57 <125232122+sanguk57@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:16:18 +0900 Subject: [PATCH 1/2] feat --- src/main/java/Calculator.class | Bin 0 -> 2021 bytes src/main/java/Calculator.java | 63 +++++++++++++++++++++ src/main/java/NumberBaseballGame.class | Bin 0 -> 1741 bytes src/main/java/NumberBaseballGame.java | 45 +++++++++++++++ src/test/java/study/StringTest.java | 73 +++++++++++++++++++++++++ 5 files changed, 181 insertions(+) create mode 100644 src/main/java/Calculator.class create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/NumberBaseballGame.class create mode 100644 src/main/java/NumberBaseballGame.java diff --git a/src/main/java/Calculator.class b/src/main/java/Calculator.class new file mode 100644 index 0000000000000000000000000000000000000000..f73fdb311046ffcb771abf5f895702d6eba82464 GIT binary patch literal 2021 zcmZ`)OK?+V6#o9^ano@73M9~CAs~-DNhuJZ#bT)-krdECp|l{k=_S387s(A%w+!Pj zmZgr=88(hiXB-xl(Y7Nquyu6f(xt8w*N)C8e*aB0MPoYWKlj{w-sk&Izx(r>X8=Y~ zaia}31$GqNuwcM~93c6+d9)T@^mMXys zskBkWCU^y0d41kY8hKq{Qy^G3uu`T&BcB;ouvx%8re)KWtY#KUZunr6N1uwVc!edU z8Q7$`zY%V|buihq9F~P`Q?VU>)?cWw9nBifGgz|*A9kvE6}tr5(~Zas;B6Hk;l>{9 zRS-}SL`Y!c-(6YfQ9vn5|5>)p9!SUr_z+PM#XeSjN6Q+sn#p2M&KFC1xoi|a`pun!$!^hR-538TA`D-69*X}OY79Q0e zedVuxbg#OwSY5bZUHELD8!;S|13UCTF(+I&EYNptDm)#%dVG2|;6FYUnvRBJSN)WN zp{Q!lY3C0)oBjVwDEZB<--_7)OfG9;#s;<$>} zF-jjf%}mefC4mF$eT>a%rIdcVqUY24a05l_JdM|l=xGdZC^)I&6y9u+YD14xx?$vJ zty^-%g@l0cyKx3d1>-8t;@r!(!UC#*qg>1y1l8X4i8W9hocb@a-FO@CC`hTeAdyzT zh!%Jgd6S)Ejjp0rD(e(om=GX*&)~9(NnGKlIjuZ5R+wcsd6yF|Of$={)VQYNU0mnI zU_Z2M`CntLZ-U_<>zbiO)CJZlLN44Oiz%2B=x^d{v}BlbIo&kU>!5X$Dg(7g_x#nn z53Bbd_-pqc5@7GwKKS|{Ol5G8O{}NaC2#lHN^V9kUC?Ia`0Y7OZV+FfMOT6>v?FC| z>09Gk(b8AIPHb$U%Ds>(R7z?6lm)7;=2hP(E5HukvNmo;5ZxRPoIJCX`pMZ%I6|us zU-Cg9$5Vcms_n?5z-Os?5jNP#gHNGMK0*5`x{~1)c*dW?H@S)}XCrIqz4QeA(Z~vR ztYCN3T^}8S&Ngst-8{EIW#kS7(8;%4U5yYY7(xc_4Xq*k2|Au4HtE^FiUZFZF_!tU z&C0Nosz497r-$bz6e-cThY`3+8vgdne*#j?6JNuTWH_{fk#S~s;xS*=E3NzKWrBT7 zYAfGz*VWC%0~)te^F`QmdIfKdM{I*@I6vaKIApiQ9k#gB>x?}66hC{Nj^ZNJh}Std zWM9Jf@_~wRN3VTIX^Xphl@(n2f{yspNg+~zVsNd_jKC*-m`7HTP@;UN8 zuVWD#C}b(H>6uB7v5H&I?>WWNi*5a~S@ou$Vyi(cDQr?F-FmPWUhews2y^pC_!nhi z11x4gzQrJZzybV-gZK$?{DQ;ymAZd$HOgVd(D{NuP!#wSoKbLFkO@xTM-BPd)zzhL SQxrx04eh^Muq|7On12BP0n{4+ literal 0 HcmV?d00001 diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..75a4b61a3 --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,63 @@ +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Calculator { + + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + String expression = sc.nextLine(); + Calculator cc = new Calculator(); + Calculator.create(expression); + System.out.println(cc.calculate(expression)); + } + public static Calculator create (String expression){ + + if (!validatingExpression(expression)) + throw new IllegalArgumentException("올바른 연산식이 아닙니다."); + + return new Calculator(); + } + + private static boolean validatingExpression (String expression){ + + Pattern pattern = Pattern.compile("^[+\\-]?\\d( ?[*\\-+/] ?\\d)*$"); + Matcher matcher = pattern.matcher(expression); + return matcher.find(); + } + + + public int calculate (String expression) { + + String[] parsingExpression = expression.split(" "); + + int calculationResult = Integer.parseInt(parsingExpression[0]); + + String operator = ""; + + int operand = 0; + + for (int i = 0; i < parsingExpression.length; i++) { + + if (i % 2 != 0) { // 홀수 인덱스에서 연산자 값 추출 + operator = parsingExpression[i]; + continue; + } + + operand = Integer.parseInt(parsingExpression[i]); + switch (operator) { + case "+" -> calculationResult += operand; + case "-" -> calculationResult -= operand; + case "*" -> calculationResult *= operand; + case "/" -> { + if (operand != 0) calculationResult /= operand; + else throw new ArithmeticException("0을 나눌 수 없습니다."); + } + } + + } + return calculationResult; + } + +} diff --git a/src/main/java/NumberBaseballGame.class b/src/main/java/NumberBaseballGame.class new file mode 100644 index 0000000000000000000000000000000000000000..ffd8663a9a423127ec394edcf2e70c07cca46d73 GIT binary patch literal 1741 zcmZux?@wD*7=BKB+gr*7%8vq;c3c>+mN5`eRDOwLZdPGTQ5M{%3%#;JxiqC++(#oM z1eUoaE&&3iIF?Q2gCb)@(Lcb%#6Lklne1LZn;4zG=U#qPCCxpj=bYz#-{*bb=bRs( zeftA|*YJ)THrPc75*%fbH#+n93#?{dzgR?WLMU&kO_F!m8go~lj1f`PE zSkvIBqG@U(2X5qwkR;?G|6g7PZ%!xGNd{X~WAOHwmeHxEuoh1x2a^d^ne1>wgonp3 zWGD}w2nh}4pco}0yb?-L#!z%QH94Xt&MVXEh!TrkQYKZ3F+IvqY&pngM-iTbPeg?T zKLQN-$4T}p$?KG2LeU~q#FA3H;OzONhiU`xq^cxT<1`&irKl9g{I4XU+97`zY8hl> z?n@(mM}M#<8|hg+^I-qpwrt$rGiG*;)l$62CzScxo8430SWOMwo` zU^arv6xGH$LPNYz=Oi?ui9yuV50hbzCC*_tRi{}(3tAa+HM2Cm*VWMp@)!(FX=9v9MyK@9y7Q)H56U=i72~!-0?Et(NR6Em{?7 zbfJ^MR~s?rH}>au_0>INb$kD#O}RFrf3qjoYHoDnRS`WBsrLM#2F?0V71S{`LCkI_ zv6MRS0Yhmp9I|wfjUXMI!37Dg<0AFkOoOnUC)D~{ma%mYIu87icC$Lx;ldjXu0xJ4 zyva~n`o&M7ur|~UXH9;`XitC?%)qe+ZcndjCQ1BQ< zUz=uqH1fxR8w&KxK|d}Z7~iI~lTNyi?fQ06UV>8-x4ZnF$U5rGQMPy6+k`F1MKwF9 zJG+C1HizHq*v0c*5C8s!$FYIOX+$oKB8@JTP$VBkmT6TD3AOa3oI^fZQGj-M&_#(2 z5SqCC#V@tUs>y2i$NUVas44gA|=JU8?9(TOLnvVAPM%-Ej zoEfxm?l0`1jnA*p++gP5bqE=h9A?}>p4TDzHf@^$=Nf)J477&IqbQNs8uDpH{w)T= ze;BNx+Ojigt)b8Yn=8)8#GC9)w>%Yh+=3nCVbT^@Uen*J;QP0}xiMdJ* l=PmXl{~1p47PI2KKhezo01Mh0Y^QBC0YA0-ipk{de*l`$zrO$g literal 0 HcmV?d00001 diff --git a/src/main/java/NumberBaseballGame.java b/src/main/java/NumberBaseballGame.java new file mode 100644 index 000000000..1b2e0b2ee --- /dev/null +++ b/src/main/java/NumberBaseballGame.java @@ -0,0 +1,45 @@ +import java.util.Scanner; + +public class NumberBaseballGame { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int com = (int) (Math.random() * 1000); + if (com >= 100) { + while (com >= 100) { + int strike = 0; + int ball = 0; + System.out.print("숫자를 입력해 주세요 : "); + int userNum = sc.nextInt(); + com = NumberBaseballGame.numberCheck(com, userNum); + } + + } + } + + public static int numberCheck(int com, int userNum) { + Scanner sc = new Scanner(System.in); + int strike = 0, ball = 0; + if (com / 100 == userNum / 100) strike++; + if (com / 10 % 10 == userNum / 10 % 10) strike++; + if (com % 10 == userNum % 10) strike++; + if (strike == 3) { + System.out.println("3개의 숫자를 모두 맞히셨습니다! 게임 종료"); + System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); + int select = sc.nextInt(); + if (select == 1) { + com = (int) (Math.random() * 1000); + if (com >= 100) return com; + } else return -1; + } + if (strike != 3) { + if (com / 100 != userNum / 100 && (com / 10 % 10 == userNum / 100 || com % 10 == userNum / 100)) ball++; + if (com / 10 % 10 != userNum / 10 % 10 && (com / 100 == userNum / 10 % 10 || com % 10 == userNum / 10 % 10)) + ball++; + if (com % 10 != userNum % 10 && (com / 100 == userNum % 10 || com / 10 % 10 == userNum % 10)) ball++; + if (strike != 0 && ball != 0) System.out.printf("%d스트라이크 %d볼 %n", strike, ball); + if (strike == 0 && ball != 0) System.out.printf("%d볼 %n", ball); + if (strike != 0 && ball == 0) System.out.printf("%d스트라이크 %n", strike); + } + return com; + } +} diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d90b..eb3e119a7 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -1,13 +1,86 @@ package study; +import jdk.nashorn.internal.runtime.logging.Logger; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; +@Logger public class StringTest { @Test void replace() { String actual = "abc".replace("b", "d"); assertThat(actual).isEqualTo("adc"); } + + @Test + void split(){ + String[] number1 = "1,2".split(","); + assertThat(number1).contains("2", "1"); // 순서 상관없이 + assertThat(number1).containsExactly("1", "2"); // 순서까지 일치 + System.out.println("number1 배열 = " + Arrays.toString(number1)); + + String[] number2 = "1".split(","); + assertThat(number2).contains("1"); + assertThat(number2).containsExactly("1"); + System.out.println("number2 배열 = " + Arrays.toString(number2)); + } + + @Test + void substring(){ + String str = "(1,2)".substring(1,4); + assertThat(str).isEqualTo("1,2"); + } + + @Test + @DisplayName("특정 위치의 문자를 가져올 때 위치 값을 벗어나면 StringIndexOutOfBoundsException이 발생") + void charAt(){ + String str = "abc"; + try { + char charTest = str.charAt(3); + } + catch (StringIndexOutOfBoundsException e){ + e.printStackTrace(); + } + } + } + class SetTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @Test + void setSize(){ + System.out.println("set size = "+numbers.size()); + } + + @Test + void contains() { + assertThat(numbers.contains(1)).isTrue(); + assertThat(numbers.contains(2)).isTrue(); + assertThat(numbers.contains(3)).isTrue(); + } + + @ParameterizedTest + @ValueSource(ints = {1, 2, 3}) + void setNumberTest(int number) { + assertTrue(numbers.contains(number)); // numbers Set배열에 1, 2, 3 순서대로 add + } + } From 7d07cacee657a354d77bbc994ebb580f0ee51584 Mon Sep 17 00:00:00 2001 From: sanguk57 <125232122+sanguk57@users.noreply.github.com> Date: Wed, 29 Mar 2023 11:34:51 +0900 Subject: [PATCH 2/2] =?UTF-8?q?test:=EC=9E=85=EB=A0=A5=20=EB=B0=9B?= =?UTF-8?q?=EC=9D=80=20=EC=88=AB=EC=9E=90=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 19 ++- src/main/java/Calculator.class | Bin 2021 -> 2021 bytes src/main/java/Calculator.java | 9 +- src/main/java/NumberBaseballGame.class | Bin 1741 -> 1805 bytes src/main/java/NumberBaseballGame.java | 23 +-- src/main/java/baseball/Ball.java | 33 +++++ src/main/java/baseball/BallStatus.java | 5 + src/main/java/baseball/ValidationUtils.java | 13 ++ src/test/java/baseball/BallTest.java | 26 ++++ .../java/baseball/ValidationUtilsTest.java | 19 +++ src/test/java/study/StringTest.java | 139 +++++++++++++++--- 11 files changed, 255 insertions(+), 31 deletions(-) create mode 100644 src/main/java/baseball/Ball.java create mode 100644 src/main/java/baseball/BallStatus.java create mode 100644 src/main/java/baseball/ValidationUtils.java create mode 100644 src/test/java/baseball/BallTest.java create mode 100644 src/test/java/baseball/ValidationUtilsTest.java diff --git a/build.gradle b/build.gradle index 8172fb73f..c87b8af75 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' group = 'camp.nextstep' version = '1.0.0' -sourceCompatibility = '1.8' +sourceCompatibility = "14" repositories { mavenCentral() @@ -17,3 +17,20 @@ dependencies { test { useJUnitPlatform() } + +//// annotation processing 추가 +//tasks.withType(JavaCompile) { +// options.annotationProcessorPath = configurations.apt +//} +// +//configurations { +// apt +//} +// +//dependencies { +// apt 'org.projectlombok:lombok:1.18.20' +// compileOnly 'org.projectlombok:lombok:1.18.20' +//} + +sourceCompatibility = 11 +targetCompatibility = 11 diff --git a/src/main/java/Calculator.class b/src/main/java/Calculator.class index f73fdb311046ffcb771abf5f895702d6eba82464..365efbdc8b993bcf0ffce5eaa1e90fd3cba35c38 100644 GIT binary patch delta 13 UcmaFL|CE2jQg%k$$;;U70Vo;;0ssI2 delta 13 UcmaFL|CE2jQg%k0$;;U70Vov(0RR91 diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index 75a4b61a3..30c2fcb6a 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -47,12 +47,13 @@ public int calculate (String expression) { operand = Integer.parseInt(parsingExpression[i]); switch (operator) { - case "+" -> calculationResult += operand; - case "-" -> calculationResult -= operand; - case "*" -> calculationResult *= operand; - case "/" -> { + case "+" : calculationResult += operand; break; + case "-" : calculationResult -= operand; break; + case "*" : calculationResult *= operand; break; + case "/" : { if (operand != 0) calculationResult /= operand; else throw new ArithmeticException("0을 나눌 수 없습니다."); + break; } } diff --git a/src/main/java/NumberBaseballGame.class b/src/main/java/NumberBaseballGame.class index ffd8663a9a423127ec394edcf2e70c07cca46d73..1105cb47cc9e8020fc0f2d38272d872afec871a4 100644 GIT binary patch delta 931 zcmYjPO-~b16g_V~I;9L>EkjG`@YzZWg$l|5A|Rq-5fNR0H=-#7@nfygmH)v7uu@}Uhs7v=bU#xx*3 zycIRZ5c648_+;!ut+B|wH31oQsArJ$#O-8QPcrcSK-h)`G)f4`*pH@#ch0(8eRk?< zVy5?6VswJRd;4Jo>coHY~-6vjJ?_^(~-u&bW9Fmi9=p=U%B z6oFeoa1|~^NW;TxBClEIXlt)d!&{$*Uy~F;k?PkG)P!eyU(9#8%)1)$C>N1S4Dunt zPA^u`uh!B@2r`-pZy}@;1?WW~aVx?Qjlm$@a)8^TVo|~w2@+$ZppgX7f0+W@^n{hV zk^(lxck!A~7}rE1uUU-mLTj_j-kioklcYv5m?bF*Pf$$a6pJEeHm%C$ea!#ow!n z2^N~*NuI8nr|#50n=Zpic?rZhN^;;LN8IqBjKq3qm{jtnocydn1eJ)ADOXU9X?QV1 zV}6U=d<;K6B7n~{>py7P-3YQaG_Z4MWE0fI^wWoeJ!(fzX6+L1Gj=cTjOL=gysT&v(B2J9DpMr`+~#@5LJcr*LW2 z_GGvWPPi1fRUAe&gJWzdHcOu4V3F#IGeYk*N6*a?4)s5sIw=~uOO+?{RfPa&|?kZw2Cu0YwQZc zmFF0&!I`hmUipJmHf)TG)kaQC8SlmDvJ(PbjL}1+D2nth!$R>q?P8G3oHM!w7JUgN zy@|3dR6d8}saZBc(Pm1BbW|cjqZs>Byh3{mWBipEP!MCsy*Q#b7p-Efji(gEL zUD77}jz9@b%_X#S$(mc<#?koWUmtlR0lZNg>=YG>R=B8@hg$n-*8mkkl%o|D=tL!Y zQH3~xy+EhQ+)qADg*8wGao#t_K9e;v=V0jrccZ2cp^IDUp|!=d*YW_LjN9^^Wxu0OehncldbbguNK0;suO$plde`A~OKYg%nnRL# z=)de5G`F;lYMxE)XH5xS>e={5;0jHNPs&cSszMEX^s9Cdha_rg+S)A9_u?{rzKS~N z1ZN)gC=j3`0=Pwx9-;|52;l?5*hPeCh_YV#ttJT`$EBfS4?d2IIm>^boqY!j3oSyU N5b$b*ZrrqT@i!>IpGp7# diff --git a/src/main/java/NumberBaseballGame.java b/src/main/java/NumberBaseballGame.java index 1b2e0b2ee..58ae7e833 100644 --- a/src/main/java/NumberBaseballGame.java +++ b/src/main/java/NumberBaseballGame.java @@ -3,22 +3,26 @@ public class NumberBaseballGame { public static void main(String[] args) { Scanner sc = new Scanner(System.in); - int com = (int) (Math.random() * 1000); - if (com >= 100) { - while (com >= 100) { + int min = 100; + int max = 999; + int com = (int) (Math.random() * (max - min + 1)) + min; + + while (com != -1) { + System.out.println(com); int strike = 0; int ball = 0; System.out.print("숫자를 입력해 주세요 : "); int userNum = sc.nextInt(); - com = NumberBaseballGame.numberCheck(com, userNum); + com = NumberBaseballGame.numberCheck(com, userNum, sc); } - } } - public static int numberCheck(int com, int userNum) { - Scanner sc = new Scanner(System.in); + public static int numberCheck(int com, int userNum, Scanner sc) { int strike = 0, ball = 0; + int min = 100; + int max = 999; + if (com / 100 == userNum / 100) strike++; if (com / 10 % 10 == userNum / 10 % 10) strike++; if (com % 10 == userNum % 10) strike++; @@ -27,8 +31,8 @@ public static int numberCheck(int com, int userNum) { System.out.println("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요."); int select = sc.nextInt(); if (select == 1) { - com = (int) (Math.random() * 1000); - if (com >= 100) return com; + return (int) (Math.random() * (max - min + 1)) + min; + } else return -1; } if (strike != 3) { @@ -39,6 +43,7 @@ public static int numberCheck(int com, int userNum) { if (strike != 0 && ball != 0) System.out.printf("%d스트라이크 %d볼 %n", strike, ball); if (strike == 0 && ball != 0) System.out.printf("%d볼 %n", ball); if (strike != 0 && ball == 0) System.out.printf("%d스트라이크 %n", strike); + if (strike == 0 && ball == 0) System.out.printf(""); } return com; } diff --git a/src/main/java/baseball/Ball.java b/src/main/java/baseball/Ball.java new file mode 100644 index 000000000..9eaf60d09 --- /dev/null +++ b/src/main/java/baseball/Ball.java @@ -0,0 +1,33 @@ +package baseball; + +public class Ball { + private final int ballNum; + private final int position; + + public Ball(int position, int ballNum) { + this.position = position; + this.ballNum = ballNum; + } + + public BallStatus play(Ball ball) { + BallStatus ballStatus = null; + if(ball.mathBallNum(ballNum)){ + ballStatus = BallStatus.BALL; + if(ball.mathPosition(position)){ + ballStatus = BallStatus.STRIKE; + } + } + else ballStatus = BallStatus.NOTING; + + return ballStatus; + } + + private boolean mathPosition(int position) { + return this.position == position; + } + + private boolean mathBallNum(int ballNum) { + return this.ballNum == ballNum; + } + +} diff --git a/src/main/java/baseball/BallStatus.java b/src/main/java/baseball/BallStatus.java new file mode 100644 index 000000000..9d0d38b05 --- /dev/null +++ b/src/main/java/baseball/BallStatus.java @@ -0,0 +1,5 @@ +package baseball; + +public enum BallStatus { + BALL, STRIKE, NOTING +} diff --git a/src/main/java/baseball/ValidationUtils.java b/src/main/java/baseball/ValidationUtils.java new file mode 100644 index 000000000..4ed4f72a3 --- /dev/null +++ b/src/main/java/baseball/ValidationUtils.java @@ -0,0 +1,13 @@ +package baseball; + +public class ValidationUtils { + + public static final int MIN_NUM = -1; + public static final int MAX_NUM = 9; + + public static boolean validNumTest(int num) { +// if( -1 < num && num <= 9)return true; +// return false; + return MIN_NUM < num && num <= MAX_NUM; + } +} diff --git a/src/test/java/baseball/BallTest.java b/src/test/java/baseball/BallTest.java new file mode 100644 index 000000000..5c71c9451 --- /dev/null +++ b/src/test/java/baseball/BallTest.java @@ -0,0 +1,26 @@ +package baseball; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +public class BallTest { + private Ball com; + @BeforeEach + void sutup(){ + com = new Ball(1, 4); + } + @Test + void noting(){ + assertThat(com.play(new Ball(2,5))).isEqualTo(BallStatus.NOTING); + } + @Test + void ball(){ + assertThat(com.play(new Ball(2,4))).isEqualTo(BallStatus.BALL); + } + @Test + void strike(){ + assertThat(com.play(new Ball(1, 4))).isEqualTo(BallStatus.STRIKE); + } +} diff --git a/src/test/java/baseball/ValidationUtilsTest.java b/src/test/java/baseball/ValidationUtilsTest.java new file mode 100644 index 000000000..589f14988 --- /dev/null +++ b/src/test/java/baseball/ValidationUtilsTest.java @@ -0,0 +1,19 @@ +package baseball; + +import baseball.ValidationUtils; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +class ValidationUtilsTest { + @Test + @DisplayName("숫자야 0~9 사이 숫자 테스트") + void baseballNumberTest(){ + assertThat(ValidationUtils.validNumTest(9)).isTrue(); + assertThat(ValidationUtils.validNumTest(1)).isTrue(); + assertThat(ValidationUtils.validNumTest(0)).isTrue(); + assertThat(ValidationUtils.validNumTest(-1)).isFalse(); + assertThat(ValidationUtils.validNumTest(10)).isFalse(); + } +} \ No newline at end of file diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index eb3e119a7..46819ad5b 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -1,20 +1,23 @@ package study; -import jdk.nashorn.internal.runtime.logging.Logger; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; import java.util.Arrays; import java.util.HashSet; +import java.util.Scanner; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Logger + public class StringTest { @Test void replace() { @@ -23,7 +26,7 @@ void replace() { } @Test - void split(){ + void split() { String[] number1 = "1,2".split(","); assertThat(number1).contains("2", "1"); // 순서 상관없이 assertThat(number1).containsExactly("1", "2"); // 순서까지 일치 @@ -36,25 +39,31 @@ void split(){ } @Test - void substring(){ - String str = "(1,2)".substring(1,4); + void substring() { + String str = "(1,2)".substring(1, 4); assertThat(str).isEqualTo("1,2"); } @Test @DisplayName("특정 위치의 문자를 가져올 때 위치 값을 벗어나면 StringIndexOutOfBoundsException이 발생") - void charAt(){ + void charAt() { String str = "abc"; - try { - char charTest = str.charAt(3); - } - catch (StringIndexOutOfBoundsException e){ - e.printStackTrace(); + + assertThatThrownBy(() -> { + char charTest = str.charAt(3); + }).isInstanceOf(StringIndexOutOfBoundsException.class) + .hasMessageContaining("String index out of range: 3"); + + assertThatThrownBy(() -> { + char charTest = str.charAt(2); + }).isInstanceOf(StringIndexOutOfBoundsException.class) + .hasMessageContaining("String index out of range: 3"); } } -} - class SetTest { + + + class SetTest { private Set numbers; @BeforeEach @@ -67,8 +76,8 @@ void setUp() { } @Test - void setSize(){ - System.out.println("set size = "+numbers.size()); + void setSize() { + System.out.println("set size = " + numbers.size()); } @Test @@ -76,11 +85,107 @@ void contains() { assertThat(numbers.contains(1)).isTrue(); assertThat(numbers.contains(2)).isTrue(); assertThat(numbers.contains(3)).isTrue(); + assertThat(numbers.contains(4)).isFalse(); + assertThat(numbers.contains(5)).isFalse(); } @ParameterizedTest @ValueSource(ints = {1, 2, 3}) void setNumberTest(int number) { - assertTrue(numbers.contains(number)); // numbers Set배열에 1, 2, 3 순서대로 add + assertTrue(numbers.contains(number)); } - } + + @ParameterizedTest + @CsvSource({"1", "2", "3"}) + void setNumberTest(String input) { + int number = Integer.parseInt(input); + assertTrue(numbers.contains(number)); + } + } + + class calculatorTest { + @Test + void calculatorTest_Addition() { + String input = "2 + 3 * 4 / 2"; + String[] values = input.split(" "); + + int num1 = Integer.parseInt(values[0]); + int num2 = Integer.parseInt(values[2]); + int num3 = Integer.parseInt(values[4]); + int num4 = Integer.parseInt(values[6]); + int result1 = 0, result2 = 0, result3 = 0; + + switch (values[1]) { + case "+" : result1 = num1 + num2; break; + case "-" : result1 = num1 - num2; break; + case "*" : result1 = num1 * num2; break; + case "/" : result1 = num1 / num2; break; + default: + } + switch (values[3]) { + case "+" : result2 = result1 + num3; break; + case "-" : result2 = result1 - num3; break; + case "*" : result2 = result1 * num3; break; + case "/" : result2 = result1 / num3; break; + default: + } + switch (values[5]) { + case "+" : result3 = result2 + num4; + case "-" : result3 = result2 - num4; + case "*" : result3 = result2 * num4; + case "/" : result3 = result2 / num4; + default: + } + System.out.println(result3); + assertThat(result3).isEqualTo(10); + } + + +// @ParameterizedTest +// @ValueSource(strings = {"1 + 2 * 3 - 4 / 2", "5 - 3 * 2 + 4 / 2"}) +// void calculatorTest(String input) { +// String[] values = input.split(" "); +// assertThat(values).hasSize(9); // 입력된 값이 공백으로 구분된 3개의 값인지 검증 +// assertThat(values[0]).matches("\\d+"); // 첫 번째 값이 정수인지 검증 +// assertThat(values[1]).matches("[+\\-*/]"); // 두 번째 값이 연산자인지 검증 +// assertThat(values[2]).matches("\\d+"); // 세 번째 값이 정수인지 검증 +// assertThat(values[3]).matches("[+\\-*/]"); // 네 번째 값이 연산자인지 검증 +// assertThat(values[4]).matches("\\d+"); // 다섯 번째 값이 정수인지 검증 +// assertThat(values[5]).matches("[+\\-*/]"); // 여섯 번째 값이 연산자인지 검증 +// assertThat(values[6]).matches("\\d+"); // 일곱 번째 값이 정수인지 검증 +// +// int num1 = Integer.parseInt(values[0]); +// int num2 = Integer.parseInt(values[2]); +// int num3 = Integer.parseInt(values[4]); +// int num4 = Integer.parseInt(values[6]); +// int num5 = Integer.parseInt(values[8]); +// int result1 = 0, result2 = 0, result3 = 0; +// switch (values[1]) { +// case "+" : result1 = num1 + num2; break; +// case "-" : result1 = num1 - num2; break; +// case "*" : result1 = num1 * num2; break; +// case "/" : result1 = num1 / num2; break; +// } +// switch (values[3]) { +// case "+" : result2 = result1 + num3; +// case "-" : result2 = result1 - num3; // 기존 코드에서 수정 +// case "*" : result2 = result1 * num3; // 기존 코드에서 수정 +// case "/" : result2 = result1 / num3; // 기존 코드에서 수정 +// } +// switch (values[5]) { +// case "+" : result3 = result2 + num4; +// case "-" : result3 = result2 - num4; // 기존 코드에서 수정 +// case "*" : result3 = result2 * num4; // 기존 코드에서 수정 +// case "/" : result3 = result2 / num4; // 기존 코드에서 수정 +// } +// System.out.println(result3); +// +// assertThat(result3).isEqualTo(Integer.parseInt(values[6])); +// } + } + + + + + +