package Ġcom . bk ahl ert . kom mon s Ċ Ċ import Ġcom . bk ahl ert . kom mon s . math . BigInteger Constants Ċ import Ġcom . bk ahl ert . kom mon s . math . to BigInteger Ċ import Ġcom . bk ahl ert . kom mon s . test . tests Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ import Ġstri kt . api . expect Catch ing Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . contains Exactly Ċ import Ġstri kt . assertions . is A Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . is Failure Ċ import Ġstri kt . assertions . is Success Ċ import Ġstri kt . assertions . message Ċ Ċ class ĠFn Kt Test Ġ{ ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠCompose Kt Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġa ( arg : ĠString ): ĠString Ġ= Ġ"${ arg . length }" ĊĠĠĠĠĠĠĠ Ġfun Ġb ( arg : ĠString ): ĠString Ġ= Ġ"$ arg $ arg " ĊĠĠĠĠĠĠĠ Ġfun Ġc ( arg : ĠString ): ĠString Ġ= Ġ"${ arg } c " ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` a Ġ+ Ġb Ġshould Ġcall Ġb Ġwith Ġresult Ġof Ġa `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġ:: a . compose (:: b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ab (" abc ")). isEqualTo (" 3 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` b Ġ+ Ġa Ġshould Ġcall Ġa Ġwith Ġresult Ġof Ġb `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġba Ġ= Ġ:: b . compose (:: a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ba (" abc ")). isEqualTo (" 6 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` compose Ġshould Ġhave Ġ+ Ġin fix Ġfunction + `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġ:: a . plus (:: b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ab (" abc ")). isEqualTo (" 3 3 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġwith Ġthree Ġfunctions `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġ:: a . compose (:: b , Ġ:: c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ab (" abc ")). isEqualTo (" 3 3 c ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġallow Ġcomposition Ġwithout Ġreceiver `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġcomposition Of (:: a , Ġ:: b , Ġ:: c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ab (" abc ")). isEqualTo (" 3 3 c ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġallow Ġconditional Ġcomposition Ġwithout Ġreceiver `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġab Ġ= Ġcomposition Of ( true Ġto Ġ:: a , Ġfalse Ġto Ġ:: b , Ġtrue Ġto Ġ:: c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( ab (" abc ")). isEqualTo (" 3 c ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠRun Wr apping Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠWithout Receiver Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġin Ġcorrect Ġorder Ġand Ġreturn `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnValue Ġ= Ġcom . bk ahl ert . kom mon s . run Wr apping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add (" before ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add (" after ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add (" block "); Ġ" value " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( returnValue ). isEqualTo (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly (" before ", Ġ" block ", Ġ" after ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġin Ġcorrect Ġorder Ġon Ġfail `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . bk ahl ert . kom mon s . run Wr apping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add (" before ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add (" after ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrow ĠRuntimeException (" test ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Failure (). message . isEqualTo (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly (" before ", Ġ" after ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠWith Receiver Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġin Ġcorrect Ġorder Ġand Ġreturn `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < Pair < Any ?, ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠreturnValue Ġ= Ġ" receiver ". run Wr apping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add ( this Ġto Ġ" before ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add ( this Ġto Ġ" after ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add ( this Ġto Ġ" block "); Ġ" value " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( returnValue ). isEqualTo (" value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly (" receiver " Ġto Ġ" before ", Ġ" receiver " Ġto Ġ" block ", Ġ" receiver " Ġto Ġ" after ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġin Ġcorrect Ġorder Ġon Ġfail `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < Pair < Any ?, ĠString >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" receiver ". run Wr apping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add ( this Ġto Ġ" before ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevents . add ( this Ġto Ġ" after ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrow ĠRuntimeException (" test ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Failure (). message . isEqualTo (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ). contains Exactly (" receiver " Ġto Ġ" before ", Ġ" receiver " Ġto Ġ" after ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTimes Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġblock Ġ 0 Ġtimes `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ Ġ 0 Ġ* Ġ{ Ġthrow ĠIllegalStateException (" test Ġfailed ") Ġ} Ġ}. is Success () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġblock Ġn Ġtimes `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ* Ġ{ Ġn -- Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( n Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġn Ġresults `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġrun Ġ{ Ġn Ġ* Ġ{ Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( results ). contains Exactly ( 0 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġnegative Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ Ġ- 1 Ġ* Ġ{ Ġprintln (" test Ġfailed ") Ġ} Ġ}. is Failure (). is A < IllegalArgumentException >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠBigInteger Times Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġblock Ġ 0 Ġtimes `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ ĠBigInteger Constants . ZERO Ġ* Ġ{ Ġthrow ĠIllegalStateException (" test Ġfailed ") Ġ} Ġ}. is Success () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġrun Ġblock Ġn Ġtimes `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġ 3 . to BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ* Ġ{ Ġn -- Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( n Ġ== ĠBigInteger Constants . ZERO ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġn Ġresults `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġ 3 . to BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġrun Ġ{ Ġn Ġ* Ġ{ Ġit Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( results ). contains Exactly ( 0 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġnegative Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ Ġ(- 1 ). to BigInteger () Ġ* Ġ{ Ġprintln (" test Ġfailed ") Ġ} Ġ}. is Failure (). is A < IllegalArgumentException >() ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġon Ġtoo Ġlarge Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Catch ing Ġ{ Ġ( Int . MAX _ VALUE . to BigInteger () Ġ+ ĠBigInteger Constants . ONE ) Ġ* Ġ{ Ġprintln (" test Ġfailed ") Ġ} Ġ}. is Failure (). is A < IllegalArgumentException >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġrequire Ġnot Ġempty `() Ġ= Ġtests Ġ{ ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". require NotEmpty () Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". require NotEmpty Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ Ġ"". require NotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ Ġ"". require NotEmpty Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġmessage . isEqualTo (" error ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġrequire Ġnot Ġblank `() Ġ= Ġtests Ġ{ ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". require NotBlank () Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". require NotBlank Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ Ġ" ĠĠ Ġ". require NotBlank () Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ Ġ" ĠĠ Ġ". require NotBlank Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġmessage . isEqualTo (" error ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġcheck Ġnot Ġempty `() Ġ= Ġtests Ġ{ ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". check NotEmpty () Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". check NotEmpty Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalStateException > Ġ{ Ġ"". check NotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalStateException > Ġ{ Ġ"". check NotEmpty Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġmessage . isEqualTo (" error ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` should Ġcheck Ġnot Ġblank `() Ġ= Ġtests Ġ{ ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". check NotBlank () Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" abc ". check NotBlank Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġis EqualTo (" abc ") Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalStateException > Ġ{ Ġ" ĠĠ Ġ". check NotBlank () Ġ} ĊĠĠĠĠĠĠĠ Ġexpect Throws < IllegalStateException > Ġ{ Ġ" ĠĠ Ġ". check NotBlank Ġ{ Ġ" error " Ġ} Ġ} Ġthat Ġ{ Ġmessage . isEqualTo (" error ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠNullable Invoke Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġapply Ġf Ġif Ġset `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Red undant Nullable ReturnType ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf : Ġ(( String ) Ġ-> ĠString )? Ġ= Ġ{ Ġit Ġ+ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( f (" a ")). isEqualTo (" aa ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġunchanged Ġargument Ġif Ġf Ġis Ġunset `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Red undant Nullable ReturnType ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf : Ġ(( String ) Ġ-> ĠString )? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( f (" a ")). isEqualTo (" a ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ