@ file : Suppress (" FOR BID DEN _ IDENTITY _ EQUAL S ") Ċ package Ġkotlinx . io Ċ Ċ import Ġkotlinx . io . buffer .* Ċ import Ġkotlinx . io . pool .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠInput Output Test Ġ{ ĊĊĠĠĠ Ġval ĠEmpty Input Ġ= Ġobject Ġ: ĠInput () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfill ( buffer : ĠBuffer , ĠstartIndex : ĠInt , Ġend Index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġerror Ġ= ĠIllegalStateException (" Custom Ġfill Ġerror ") ĊĊĠĠĠ Ġval ĠError Input Ġ= Ġobject Ġ: ĠInput () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfill ( buffer : ĠBuffer , ĠstartIndex : ĠInt , Ġend Index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġerror ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Available To With Same Buffer () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinstance : ĠBuffer Ġ= ĠBuffer . EMPTY ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠBuffer Ġ= ĠBuffer . EMPTY ĊĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠInput Ġ= ĠLambda Input Ġ{ Ġbuffer , Ġstart , Ġend Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= Ġbuffer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Lambda Input Ġ 4 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠLambda Output Ġ{ Ġsource , ĠstartIndex , Ġend Index Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġsource ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġend Index ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput . read Available To ( output ) ĊĠĠĠĠĠĠĠ Ġoutput . flush () ĊĊĠĠĠĠĠĠĠ ĠassertNotNull ( instance ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( instance Ġ=== Ġresult ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fill Direct () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmy Buffer Ġ= Ġbuffer Of ( ByteArray ( 1 0 2 4 )) ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġobject Ġ: ĠInput () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfill ( buffer : ĠBuffer , ĠstartIndex : ĠInt , Ġend Index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġmy Buffer Ġ=== Ġbuffer Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer [ startIndex ] Ġ= Ġ 4 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Source () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġinput . read Available To ( my Buffer )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Discard Exact On Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEmpty Input . discard Exact ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Discard On Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , ĠEmpty Input . discard ( 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Pref etch On Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse Ġ{ ĠEmpty Input . prefetch ( 1 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Preview On Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĠEmpty Input . preview Ġ{ Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest By pass Fill Exceptions () Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . read Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . preview Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . prefetch ( 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . discard Exact ( 1 ) Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . ex hausted () Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Input . read Available To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOutput () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġflush ( source : ĠBuffer , ĠstartIndex : ĠInt , Ġend Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" flush ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Source () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" close ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Exception Ġ{ ĠError Input . read Available To ( buffer Of ( ByteArray ( 1 0 ))) Ġ} ĊĊĠĠĠĠĠĠĠ ĠError Input . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Input CopyTo () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠByteArray ( 1 0 2 4 ) Ġ{ Ġit . to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠByteArray Input ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠByteArray Output () ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġinput . copy To ( output ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( input . ex hausted ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( content . size , Ġcount ) ĊĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( content , Ġoutput . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Input CopyTo With Size (): ĠUnit Ġ= ĠlistOf ( 0 , Ġ 1 , Ġ 1 2 8 Ġ+ Ġ 1 , Ġ 1 0 2 4 Ġ+ Ġ 1 , Ġ 4 0 9 6 Ġ+ Ġ 1 ). forEach Ġ{ Ġsize Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠByteArray ( 8 Ġ* Ġ 1 0 2 4 ) Ġ{ Ġit . to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠByteArray Input ( content ) ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠByteArray Output () ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġinput . copy To ( output , Ġsize ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue (! input . ex hausted ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( size , Ġcount ) ĊĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( content . slice Array ( 0 Ġuntil Ġsize ), Ġoutput . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Available To Range () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġexecuted Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠInput Ġ= Ġobject Ġ: ĠInput () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfill ( buffer : ĠBuffer , ĠstartIndex : ĠInt , Ġend Index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 2 4 , Ġend Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġend Index Ġ- ĠstartIndex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose Source () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġbuffer Of ( ByteArray ( 1 0 2 4 )) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġinput . read Available To ( buffer , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( executed ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 2 3 , Ġend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Exception ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfail Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( error , Ġexception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( fail ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠSingle Shot Pool ( private Ġval Ġbuffer : ĠBuffer ) Ġ: ĠDefault Pool < Buffer >( 1 ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġproduced Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġdisposed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġproduce Instance (): ĠBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġproduced Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose Instance ( instance : ĠBuffer ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( dis posed ) ĊĠĠĠĠĠĠĠ Ġdisposed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġbuffer Ġ=== Ġinstance Ġ} ĊĠĠĠ Ġ} Ċ } Ċ