/* Ċ * ĠCopyright Ġ 2 0 1 4 - 2 0 2 1 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ */ Ċ Ċ package Ġio . ktor . tests . http . c io Ċ Ċ import Ġio . ktor . http . c io . internals .* Ċ import Ġio . ktor . utils . io . pool .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠChar Array Builder Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpool Ġ= ĠPool () ĊĠĠĠ Ġprivate Ġval Ġbuilder Ġ= ĠChar Array Builder ( pool ) ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . release () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġpool . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Append Single Char () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbuilder . length ) ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . append (' 1 ') ĊĠĠĠĠĠĠĠ ĠassertEquals (' 1 ', Ġbuilder [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġbuilder . toString ()) ĊĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Append F ew Chars () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbuilder . length ) ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append (' 0 ' Ġ+ Ġi ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (' 1 ', Ġbuilder [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 2 ', Ġbuilder [ 1 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 3 ', Ġbuilder [ 2 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 4 ', Ġbuilder [ 3 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 5 ', Ġbuilder [ 4 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 6 ', Ġbuilder [ 5 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 7 ', Ġbuilder [ 6 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 8 ', Ġbuilder [ 7 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' 9 ', Ġbuilder [ 8 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (' :', Ġbuilder [ 9 ]) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 2 3 4 5 6 7 8 9 :", Ġbuilder . toString ()) ĊĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder [ CHAR _ BUFFER _ ARRAY _ LENGTH Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Append Many Chars () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuild Text () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtext . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( text [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( text . length , Ġbuilder . length ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( text , Ġbuilder . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Append Sub Strings () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuild Text () ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġtext . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( text . substring ( i , Ġmin Of ( text . length , Ġi Ġ+ Ġlength ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ+= Ġmax Of ( 1 , Ġlength Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( text . length , Ġbuilder . length ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( text , Ġbuilder . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Sub String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuild Text () ĊĠĠĠĠĠĠĠ Ġbuilder . append ( text ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlength Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġtext . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġmin Of ( text . length , Ġi Ġ+ Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( text . substring ( i , Ġend ), Ġbuilder . substring ( i , Ġend ), Ġ" substring Ġfor Ġrange Ġ[$ i , Ġ$ end )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ+= Ġmax Of ( 1 , Ġlength Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Text (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 6 5 5 3 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (' 0 ' Ġ+ Ġ( i Ġand Ġ 0 xf )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPool Ġ: ĠNo Pool Impl < CharArray >() Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġun released Ġ= Ġmutable ListOf < CharArray >() ĊĊĠĠĠĠĠĠĠ Ġval Ġsize : ĠInt Ġget () Ġ= Ġun released . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġborrow (): ĠChar Array Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠChar Array ( CHAR _ BUFFER _ ARRAY _ LENGTH ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun released . add ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuffer ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġre cycle ( instance : ĠChar Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! un released . remove ( instance )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Re cycl ing Ġa Ġbuffer Ġthat Ġhasn 't Ġbeen Ġborrow ed Ġfrom Ġthis Ġpool ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . recycle ( instance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ