package Ġorg . part i ql . lang . pts Ċ Ċ import Ġcom . amazon . ion . Ion Sequence Ċ import Ġcom . amazon . ion . Ion Struct Ċ import Ġcom . amazon . ion . Ion Value Ċ import Ġcom . amazon . ion . system . Ion System Builder Ċ import Ġorg . part i ql . lang . Compiler Pipeline Ċ import Ġorg . part i ql . lang . Sql Exception Ċ import Ġorg . part i ql . lang . eval . Evaluation Session Ċ import Ġorg . part i ql . lang . eval . Expr Value Ċ import Ġorg . part i ql . lang . eval . Expr ValueType .* Ċ import Ġorg . part i ql . lang . eval . name Ċ import Ġorg . part i ql . lang . eval . stringValue Ċ import Ġorg . part i ql . test script . compiler .* Ċ import Ġorg . part i ql . test script . evaluator .* Ċ import Ġorg . part i ql . test script . evaluator . Test Failure . Failure Reason .* Ċ Ċ /** Ċ Ġ* ĠReference Ġimplementation ĠP TS ĠEvalu ator . Ċ Ġ*/ Ċ class ĠPart i Ql Pts Evaluator ( equality : ĠP ts Equality ) Ġ: ĠEvalu ator ( equality ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġion Ġ= ĠIon System Builder . standard (). build () ĊĠĠĠ Ġprivate Ġval Ġmissing Ġ= Ġion . single Value (" missing :: null ") ĊĊĠĠĠ Ġprivate Ġval Ġcompiler Pipeline Ġ= ĠCompiler Pipeline . standard ( ion ) ĊĊĠĠĠ Ġoverride Ġfun Ġevaluate ( test Expressions : ĠList < Test Script Expression >): ĠList < TestResult > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Expressions . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSk ipped Test Expression Ġ-> ĠTest Result Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTest Expression Ġ-> Ġrun Test ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġreference Ġimplementation Ġdoesn 't Ġneed Ġany Ġappended Ġinformation Ġcurrently ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġrun Ġa Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApp ended Test Expression Ġ-> Ġrun Test ( it . original ) ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Test ( test : ĠTest Expression ): ĠTest Result Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġrecreate Ġthe Ġenvironment Ġstruct Ġusing Ġthe Ġevaluator Ġion Ġsystem ĊĠĠĠĠĠĠĠ Ġval Ġion Struct Ġ= Ġion . newValue ( ion . new Reader ( test . environment ). apply Ġ{ Ġnext () Ġ}) Ġas ĠIon Struct ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġglobals Ġ= Ġcompiler Pipeline . value Factory . new From Ion Value ( ion Struct ). bindings ĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= ĠEvaluation Session . build Ġ{ Ġglobals ( globals ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpression Ġ= Ġcompiler Pipeline . compile ( test . statement ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Result Ġ= Ġexpression . eval ( session ). to Pts Ion () ĊĊĠĠĠĠĠĠĠ Ġverify TestResult ( test , Ġactual Result ) ĊĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠSql Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( test . expected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExpected Error Ġ-> ĠTest Result Success ( test ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExpected Success Ġ-> ĠTest Failure ( test , Ġe . generate Message (), ĠUN EXPECTED _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify TestResult ( test : ĠTest Expression , Ġactual Result : ĠIon Value ): ĠTest Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġexpected Ġ= Ġtest . expected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExpected Error Ġ-> ĠTest Failure ( test , Ġactual Result . to Ion Text (), ĠEXPECT ED _ ERROR _ NOT _ TH RO WN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExpected Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( equality . are Equal ( expected . expected , Ġactual Result )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Result Success ( test ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Failure ( test , Ġactual Result . to Ion Text (), ĠACT UAL _ DI FFER ENT _ THAN _ EXPECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun ĠExpr Value . to Pts Ion (): ĠIon Value Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< S Ġ: ĠIon Sequence > ĠExpr Value . fold To Ion Sequence ( initial : ĠS ): ĠS Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fold ( initial ) Ġ{ Ġseq , Ġel Ġ-> Ġseq . apply Ġ{ Ġadd ( el . to Pts Ion ()) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( this . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMIS SING Ġ-> Ġmissing ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNULL , ĠBOOL , ĠINT , ĠFLOAT , ĠDEC IMAL , ĠDATE , ĠTIMESTAMP , ĠSYMBOL , ĠSTRING , ĠC LOB , ĠBLOB Ġ-> Ġthis . ion Value . clone () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLIST Ġ-> Ġthis . fold To Ion Sequence ( ion . new Empty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSEXP Ġ-> Ġthis . fold To Ion Sequence ( ion . new Empty S exp ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSTR UCT Ġ-> Ġthis . fold ( ion . new Empty Struct ()) Ġ{ Ġstruct , Ġel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstruct . apply Ġ{ Ġadd ( el . name !!. stringValue (), Ġel . to Pts Ion ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB AG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbag Ġ= Ġion . new Empty S exp (). apply Ġ{ Ġadd ( ion . new Symbol (" bag ")) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . fold To Ion Sequence ( bag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠIon Value . to Ion Text (): ĠString Ġ{ ĊĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠ Ġthis . system . new Text Writer ( sb ). use Ġ{ Ġw Ġ-> Ġthis . writeTo ( w ) Ġ} ĊĊĠĠĠ Ġreturn Ġsb . toString () Ċ } ĊĊ