package Ġorg . vit riv r . cott ont ail . storage . serialization Ċ Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . vit riv r . cott ont ail . Test Constants Ċ import Ġorg . vit riv r . cott ont ail . config . Config Ċ import Ġorg . vit riv r . cott ont ail . database . catalog ue . Catalog ue Test Ċ import Ġorg . vit riv r . cott ont ail . database . catalog ue . Catalog ue Tx Ċ import Ġorg . vit riv r . cott ont ail . database . catalog ue . Default Catalog ue Ċ import Ġorg . vit riv r . cott ont ail . database . column . Column Def Ċ import Ġorg . vit riv r . cott ont ail . database . column . Column Engine Ċ import Ġorg . vit riv r . cott ont ail . database . entity . Entity Ċ import Ġorg . vit riv r . cott ont ail . database . entity . Entity Tx Ċ import Ġorg . vit riv r . cott ont ail . database . index . Abstract Index Test Ċ import Ġorg . vit riv r . cott ont ail . database . index . Index Ċ import Ġorg . vit riv r . cott ont ail . database . schema . Schema Ċ import Ġorg . vit riv r . cott ont ail . database . schema . Schema Tx Ċ import Ġorg . vit riv r . cott ont ail . execution . Transaction Manager Ċ import Ġorg . vit riv r . cott ont ail . execution . Transaction Type Ċ import Ġorg . vit riv r . cott ont ail . model . basics . Name Ċ import Ġorg . vit riv r . cott ont ail . model . record set . Standalone Record Ċ import Ġorg . vit riv r . cott ont ail . utilities . io . Tx File Utilities Ċ import Ġjava . nio . file . Files Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠAn Ġabstract Ġclass Ġfor Ġtest Ġcases Ġthat Ġtest Ġfor Ġcorrect ness Ġof Ġ[ Value ] Ġserialization Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 2 . 1 Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Serialization Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġval ĠLOGGER Ġ= ĠLoggerFactory . getLogger ( Abstract Serialization Test :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ[ Config ] Ġused Ġfor Ġthis Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġconfig : ĠConfig Ġ= ĠTest Constants . test Config () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠAss ure Ġthat Ġroot Ġfolder Ġis Ġempty ! Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( Files . exists ( this . config . root )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTx File Utilities . delete ( this . config . root ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠFiles . create Directories ( this . config . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRandom Ġseed Ġused Ġby Ġthis Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġseed Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠ Ġ/** Ġ[ Name . Schema Name ] Ġof Ġthe Ġtest Ġschema . Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġschema Name Ġ= ĠName . Schema Name (" test ") ĊĊĠĠĠ Ġ/** Ġ[ Name . Entity Name ] Ġof Ġthe Ġtest Ġschema . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġentity Name Ġ= Ġthis . schema Name . entity (" serialization ") ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Default Catalog ue ] Ġinstance Ġused Ġfor Ġthe Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġcatalog ue : ĠDefault Catalog ue Ġ= ĠDefault Catalog ue ( this . config ) ĊĊĠĠĠ Ġ/** ĠRandom Ġseed Ġused Ġby Ġthis Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġrandom Ġ= ĠSplit table Random ( this . seed ) ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Transaction Manager ] Ġused Ġfor Ġthis Ġ[ Catalog ue Test ] Ġinstance . Ġ*/ ĊĠĠĠ Ġprotected Ġval Ġmanager Ġ= ĠTransaction Manager ( this . config . execution . transaction Table Size , Ġthis . config . execution . transaction History Size ) ĊĊĠĠĠ Ġ/** ĠThe Ġ[ Column Def ] s Ġused Ġfor Ġthe Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġval Ġcolumns : ĠArray < Pair < Column Def <* >, Column Engine >> ĊĊĠĠĠ Ġ/** ĠThe Ġprint able Ġname Ġof Ġthis Ġ[ Abstract Serialization Test ]. Ġ*/ ĊĠĠĠ Ġprotected Ġabstract Ġval Ġname : ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthis Ġ[ Abstract Index Test ] Ġand Ġpre pa res Ġrequired Ġ[ Entity ] Ġand Ġ[ Index ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠPrepare Ġdata Ġstructures . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprepare Schema () ĊĠĠĠĠĠĠĠ Ġprepare Entity () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠGenerate Ġrandom Ġdata . Ġ*/ ĊĠĠĠĠĠĠĠ Ġthis . populate Database () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠRe sets Ġthe Ġrandom Ġnumber Ġgenerator . Ġ*/ ĊĠĠĠĠĠĠĠ Ġthis . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCloses Ġthe Ġ[ Default Catalog ue ] Ġand Ġdeletes Ġall Ġthe Ġfiles . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġcleanup () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . catalog ue . close () ĊĠĠĠĠĠĠĠ ĠTx File Utilities . delete ( this . config . root ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe Ġserialization Ġtest . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Starting Ġserialization Ġtest Ġon Ġ(${ Test Constants . collection Size } Ġitems ). ") ĊĠĠĠĠĠĠĠ Ġval Ġtxn Ġ= Ġthis . manager . Transaction ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcatalog ue Tx Ġ= Ġtxn . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġcatalog ue Tx . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġschema Tx Ġ= Ġtxn . get Tx ( schema ) Ġas ĠSchema Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġschema Tx . entity For Name ( this . entityName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Tx Ġ= Ġtxn . get Tx ( entity ) Ġas ĠEntity Tx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumns Ġ= Ġthis . columns . map Ġ{ Ġit . first Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( Test Constants . collection Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreference Ġ= Ġthis . next Record ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretrieved Ġ= Ġentity Tx . read ( it . to Long (), Ġcolumns ) Ġ/* ĠMap ĠDB Ġshift . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrieved . forEach Ġ{ Ġc , Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( reference [ c ] !!. isEqual ( v !! )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxn . rollback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġthe Ġ[ Split table Random ] Ġfor Ġthis Ġ[ Abstract Serialization Test ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . random Ġ= ĠSplit table Random ( this . seed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrep ares Ġand Ġreturns Ġan Ġempty Ġtest Ġ[ Schema ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprepare Schema (): ĠSchema Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Creating Ġschema Ġ${ this . schema Name }. ") ĊĠĠĠĠĠĠĠ Ġval Ġtxn Ġ= Ġthis . manager . Transaction ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġval Ġcatalog ue Tx Ġ= Ġtxn . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġcatalog ue Tx . create Schema ( this . schema Name ) ĊĠĠĠĠĠĠĠ Ġtxn . commit () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPrep ares Ġand Ġreturns Ġan Ġempty Ġtest Ġ[ Entity ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprepare Entity (): ĠEntity Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Creating Ġschema Ġ${ this . entityName }. ") ĊĠĠĠĠĠĠĠ Ġval Ġtxn Ġ= Ġthis . manager . Transaction ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġval Ġcatalog ue Tx Ġ= Ġtxn . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġcatalog ue Tx . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠ Ġval Ġschema Tx Ġ= Ġtxn . get Tx ( schema ) Ġas ĠSchema Tx ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġschema Tx . create Entity ( this . entityName , Ġ* this . columns ) ĊĠĠĠĠĠĠĠ Ġtxn . commit () ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPop ulates Ġthe Ġtest Ġdatabase Ġwith Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpopulate Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" Inser ting Ġdata Ġ(${ Test Constants . collection Size } Ġitems ). ") ĊĠĠĠĠĠĠĠ Ġval Ġtxn Ġ= Ġthis . manager . Transaction ( Transaction Type . SYSTEM ) ĊĠĠĠĠĠĠĠ Ġval Ġcatalog ue Tx Ġ= Ġtxn . get Tx ( this . catalog ue ) Ġas ĠCatalog ue Tx ĊĠĠĠĠĠĠĠ Ġval Ġschema Ġ= Ġcatalog ue Tx . schema For Name ( this . schema Name ) ĊĠĠĠĠĠĠĠ Ġval Ġschema Tx Ġ= Ġtxn . get Tx ( schema ) Ġas ĠSchema Tx ĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġschema Tx . entity For Name ( this . entityName ) ĊĠĠĠĠĠĠĠ Ġval Ġentity Tx Ġ= Ġtxn . get Tx ( entity ) Ġas ĠEntity Tx ĊĊĠĠĠĠĠĠĠ Ġ/* ĠInsert Ġdata Ġand Ġtrack Ġhow Ġmany Ġentries Ġhave Ġbeen Ġstored Ġfor Ġthe Ġtest Ġlater . Ġ*/ ĊĠĠĠĠĠĠĠ Ġrepeat ( Test Constants . collection Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Tx . insert ( next Record ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtxn . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogs Ġan Ġinformation Ġmessage Ġregarding Ġthis Ġ[ Abstract Index Test ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġlog ( message : ĠString ) Ġ= ĠLOGGER . info ("${ this . name }: Ġ$ message ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġand Ġreturns Ġthe Ġi - th Ġ[ Standalone Record ]. ĠUsually Ġgenerated Ġrandomly Ġ( which Ġis Ġup Ġto Ġthe Ġimplementing Ġclass ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġi ĠIndex Ġof Ġthe Ġ[ Standalone Record ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġnext Record ( i : ĠInt ): ĠStand alone Record Ċ }