import Ġcom . dg . eval . Evaluator Ċ import Ġcom . dg . eval . configuration . Double Eval Configuration Ċ import Ġcom . dg . eval . configuration . Eval Configuration Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġkotlin . math . pow Ċ Ċ class ĠEval Test Ċ { ĊĠĠĠ Ġ@ Suppress (" Simpl ify Boolean With Constants ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbasic Eval Tests () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠDouble Eval Configuration () ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 1 2 + 4 5 * 1 0 ", Ġvalue Ġ= Ġ 1 2 . 0 Ġ+ Ġ 4 5 Ġ* Ġ 1 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġ 1 2 . 0 Ġ/ Ġ 4 . 0 Ġ* Ġ 5 . 0 Ġ+ Ġ 4 5 . 0 Ġ* Ġ 1 3 . 0 Ġ- Ġ 7 2 . 0 Ġ* Ġ 5 9 8 . 0 ĊĠĠĠĠĠĠĠ Ġtest Expr (" 1 2 / 4 Ġ* Ġ 5 Ġ+ Ġ 4 5 * 1 3 Ġ- Ġ 7 2 Ġ* Ġ 5 9 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġd , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 3 4 5 Ġ/ Ġ 2 3 Ġ* Ġ 1 2 4 Ġ/ Ġ 4 1 Ġ* Ġ 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 3 4 5 . 0 Ġ/ Ġ 2 3 Ġ* Ġ 1 2 4 Ġ/ Ġ 4 1 Ġ* Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 3 4 5 Ġ/ Ġ 2 3 Ġ>> Ġ 3 Ġ* Ġ 1 2 4 Ġ/ Ġ 4 1 Ġ* Ġ 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ(( 3 4 5 . 0 Ġ/ Ġ 2 3 ). to Long (). shr (( 3 . 0 Ġ* Ġ 1 2 4 . 0 Ġ/ Ġ 4 1 . 0 Ġ* Ġ 1 2 . 0 ). toInt ())). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 3 4 5 Ġ/ Ġ( 2 3 Ġ>> Ġ 3 ) Ġ* Ġ 1 2 4 Ġ/ Ġ 4 1 Ġ* Ġ 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 3 4 5 . 0 Ġ/ Ġ(( 2 3 ). shr ( 3 )). toDouble () Ġ* Ġ 1 2 4 . 0 Ġ/ Ġ 4 1 . 0 Ġ* Ġ 1 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 3 4 5 Ġ/ Ġpow ( 5 , 1 2 / 9 ) Ġ* Ġ 1 2 4 Ġ/ Ġ 4 1 Ġ* Ġ 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 3 4 5 . 0 Ġ/ Ġ 5 . 0 . pow ( 1 2 . 0 Ġ/ Ġ 9 . 0 ) Ġ* Ġ 1 2 4 . 0 Ġ/ Ġ 4 1 . 0 Ġ* Ġ 1 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 2 * 5 ! + 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 2 4 3 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("- 5 && 2 == 7 && - 4 > =- 5 >> - 8 *- 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ(- 5 Ġ!= Ġ 0 Ġ&& Ġ 2 Ġ== Ġ 7 Ġ&& Ġ- 4 Ġ>= Ġ(- 5 ). shr (- 8 Ġ* Ġ- 5 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" testing \" Ġ== Ġ\" testing \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" testing \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" testing ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" testing \" Ġ+ Ġ 5 8 . 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" testing 5 8 . 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwith Consts Ġ= Ġconfig . clone () ĊĠĠĠĠĠĠĠ Ġwith Consts . set Constant ( name Ġ= Ġ" x ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 5 . 9 ) ĊĠĠĠĠĠĠĠ Ġtest Expr (" x Ġ* Ġ 2 7 Ġ+ Ġ( 8 >> 2 ) Ġ/ Ġx ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 5 . 9 Ġ* Ġ 2 7 . 0 Ġ+ Ġ(( 8 ). shr ( 2 )). toDouble () Ġ/ Ġ 5 . 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġwith Consts ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" max ( 1 , 5 , 8 . 7 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 8 . 7 , Ġconfig Ġ= Ġwith Consts ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 3 0 Ġ* ĠPI ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 3 0 Ġ* ĠMath . PI , Ġconfig Ġ= Ġwith Consts ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("- 4 ^( 7 ** 2 )** - 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ- 4 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("- 4 ^ 7 **( 2 ** - 2 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ- 3 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("- 4 ^ 7 ** 2 ** - 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ- 3 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" - 4 \" ^ 7 ** \" 2 \" ** - 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ- 3 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" abc \" + 5 ", Ġvalue Ġ= Ġ" abc 5 ", Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr ("\" 5 \" + 5 ", Ġvalue Ġ= Ġ" 5 5 ", Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 5 + \" 5 \"", Ġvalue Ġ= Ġ 1 0 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 1 2 e 5 ", Ġvalue Ġ= Ġ 1 2 0 0 0 0 0 . 0 , Ġconfig Ġ= Ġconfig ) ĊĊĠĠĠĠĠĠĠ Ġtest Expr (" 1 2 e + 5 ", Ġvalue Ġ= Ġ 1 2 0 0 0 0 0 . 0 , Ġconfig Ġ= Ġconfig ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Expr ( expr : ĠString , Ġvalue : ĠDouble ?, Ġconfig : ĠEval Configuration ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Evaluator . execute ( expr , Ġconfig ) Ġas ? ĠDouble , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Expr ( expr : ĠString , Ġvalue : ĠBoolean ?, Ġconfig : ĠEval Configuration ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Evaluator . execute ( expr , Ġconfig ) Ġas ? ĠBoolean , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Expr ( expr : ĠString , Ġvalue : ĠString ?, Ġconfig : ĠEval Configuration ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Evaluator . execute ( expr , Ġconfig ) Ġas ? ĠString , Ġvalue ) ĊĠĠĠ Ġ} Ċ }