package Ġorg . vit riv r . cott ont ail . storage . store Ċ Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Repeated Test Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util .* Ċ Ċ class ĠFile Channel Store Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpath Ġ= ĠPaths . get ("./ test . db ") ĊĠĠĠ Ġprivate Ġval Ġrandom Ġ= ĠRandom ( System . currentTimeMillis ()) ĊĠĠĠ Ġprivate Ġvar Ġstore : ĠFile Channel Store ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store Ġ= ĠFile Channel Store ( this . path , Ġfalse ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store ?. close () ĊĠĠĠĠĠĠĠ ĠFiles . delete ( this . path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsize Test All Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Short ( 0 L , Ġthis . random . nextInt ( Short . MAX _ VALUE . toInt ()). to Short ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Double ( 0 L , Ġthis . random . next Double ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Float ( 0 L , Ġthis . random . next Float ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Int ( 0 L , Ġthis . random . nextInt ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Long ( 0 L , Ġthis . random . next Long ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsize Test With Two Bytes () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( 2 ) ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Short ( 0 L , Ġthis . random . nextInt ( Short . MAX _ VALUE . toInt ()). to Short ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Double ( 0 L , Ġthis . random . next Double ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Float ( 0 L , Ġthis . random . next Float ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Int ( 0 L , Ġthis . random . nextInt ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Long ( 0 L , Ġthis . random . next Long ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsize Test With Four Bytes () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( 4 ) ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Short ( 0 L , Ġthis . random . nextInt ( Short . MAX _ VALUE . toInt ()). to Short ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Int ( 0 L , Ġthis . random . nextInt ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Float ( 0 L , Ġthis . random . next Float ()) Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Double ( 0 L , Ġthis . random . next Double ()) Ġ} ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Long ( 0 L , Ġthis . random . next Long ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsize Test With E ight Bytes () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( 8 ) ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Byte ( 0 L , Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Double ( 0 L , Ġthis . random . next Double ()) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Long ( 0 L , Ġthis . random . next Long ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġsize Test With Random Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġthis . random . next Bytes ( data ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size . to Long ()) ĊĠĠĠĠĠĠĠ ĠassertThrows ( IllegalArgumentException :: class . java ) Ġ{ Ġthis . store !!. put Data ( 0 L , Ġdata ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert DoesNot Throw Ġ{ Ġthis . store !!. put Data ( 0 L , ĠByteBuffer . wrap ( data , Ġ 1 , Ġdata . size Ġ- Ġ 1 )) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Double Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠDouble Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . next Double () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Double ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. getDouble ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Float Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠFloat Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . next Float () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Float ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. get Float ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Int Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠInt Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . nextInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Int ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. getInt ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Long Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . next Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Long ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. getLong ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Short Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠShort Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . nextInt ( Short . MAX _ VALUE . toInt ()). to Short () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Short ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. get Short ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Byte Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġindexes Ġ= ĠLong Array ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠByteArray ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues [ i ] Ġ= Ġthis . random . nextInt ( Byte . MAX _ VALUE . toInt ()). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindexes [ i ] Ġ= Ġthis . random . nextInt ( size . toInt ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . store !!. put Byte ( indexes [ i ], Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvalues . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( this . store !!. getByte ( indexes [ i ]), Ġvalues [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeated Test ( 3 ) ĊĠĠĠ Ġfun Ġwrite Data Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġthis . random . nextInt ( 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 ). to Long () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( store !!. size Ġ== Ġ 0 L ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. grow ( size ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( this . store !!. size Ġ== Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( size . toInt ()) ĊĠĠĠĠĠĠĠ Ġthis . random . next Bytes ( data ) ĊĊĠĠĠĠĠĠĠ Ġthis . store !!. put Data ( 0 L , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġthis . store !!. getData ( 0 L , ĠByteArray ( size . toInt ())) ĊĠĠĠĠĠĠĠ ĠassertTrue ( data . content Equals ( data 1 )) ĊĠĠĠ Ġ} Ċ Ċ }