/* Ċ Ġ* ĠCopyright Ġ@ Ġ 2 0 1 8 Ġ- Ġpresent Ġ 8 x 8 , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . j its i . rtp . util Ċ Ċ import Ġcom . sun . jav aws . exceptions . InvalidArgumentException Ċ import Ġio . kot lint est . Isolation Mode Ċ import Ġio . kot lint est . shouldBe Ċ import Ġio . kot lint est . should Throw Ċ import Ġio . kot lint est . specs . Should Spec Ċ import Ġorg . j its i . rtp . util . Bit Buffer Ċ import Ġjava . nio . ByteBuffer Ċ Ċ internal Ġclass ĠBit Buffer Test Ġ: ĠShould Spec () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġisolation Mode (): ĠI sol ation Mode ? Ġ= ĠI sol ation Mode . Instance Per Leaf ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Bit Buffer WithData ( var arg Ġbytes : ĠByte ): ĠBit Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBit Buffer ( ByteBuffer . wrap ( bytes )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ" get Bits " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( byte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 xFF . to Byte (), ĠĠ 0 x 0 1 , ĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 2 , ĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 4 , ĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 5 , ĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 6 , ĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Buffer Ġ= ĠBit Buffer ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" not Ġadvance Ġto Ġthe Ġnext Ġbyte Ġuntil Ġits Ġtime ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 8 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . get Bits ( 1 ). toInt () ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . get Bits ( 1 ). toInt () ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" throw Ġwhen Ġtrying Ġto Ġcross Ġa Ġbyte Ġboundary ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . get Bits ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" get Bit As Boolean " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" correct ly Ġinterpret Ġa Ġbit Ġas Ġboolean ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Bit Buffer WithData ( 0 b 1 0 0 0 0 0 0 0 . to Byte ()). get Bit As Boolean () ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Bit Buffer WithData ( 0 b 0 0 0 0 0 0 0 0 . to Byte ()). get Bit As Boolean () ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" boundary Ġcases " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= Ġcreate Bit Buffer WithData ( 0 x 0 1 , Ġ 0 x 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" work Ġfine Ġon Ġthe Ġlast Ġbit Ġof Ġa Ġbyte ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . get Bits ( 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . get Bit As Boolean () ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" work Ġfine Ġon Ġthe Ġfirst Ġbit Ġof Ġa Ġnew Ġbyte ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . get Bits ( 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . get Bit As Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . get Bit As Boolean () ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" put Bits " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . wrap ( byte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 0 , ĠĠĠ 0 x 0 0 , ĠĠĠ 0 x 0 0 , Ġ 0 x 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Buffer Ġ= ĠBit Buffer ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in Ġa Ġsingle Ġbyte " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" set Ġthem Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 0 ) ĠshouldBe Ġ 0 b 1 0 0 0 0 0 0 0 . to Byte () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 1 . to Byte (), Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 0 ) ĠshouldBe Ġ 0 b 1 1 1 0 0 0 0 0 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" to Ġfill Ġone Ġbyte Ġand Ġthen Ġthe Ġnext " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" set Ġthem Ġcorrectly ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 1 1 1 1 1 1 1 . to Byte (), Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 . to Byte (), Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( 1 ) ĠshouldBe Ġ 0 b 1 0 0 0 0 0 0 0 . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ac ross Ġbyte Ġboundaries " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould (" throw Ġan Ġexception ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 1 1 1 , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit Buffer . put Bits ( 0 b 1 1 1 1 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ