/* Ċ MIT ĠLicense Ċ Ċ Copyright Ġ( c ) Ġ 2 0 1 8 - 2 0 2 2 Ġc 6 4 lib : ĠThe ĠU lt imate ĠCom mod ore Ġ 6 4 ĠLibrary Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ of Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ in Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ to Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ copies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ furnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ copies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ IMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ FITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ AUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ LIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ OUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ SOFTWARE . Ċ */ Ċ package Ġcom . github . c 6 4 lib . ret ro assembler . binary _ inter le aver Ċ Ċ import Ġcom . github . c 6 4 lib . ret ro assembler . bin utils . Binary Output Mock Ċ import Ġcom . github . c 6 4 lib . ret ro assembler . domain . shared . Illegal Input Exception Ċ import Ġio . v avr . collection . List Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Assertions . fail Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠBinary Inter le aver Test Ġ{ ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` inter le aver Ġwith Ġsingle Ġoutput Ġjust Ġpasses Ġth ru `() Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġoutput Ġ= ĠBinary Output Mock () ĊĠĠĠ Ġval Ġinter le aver Ġ= ĠBinary Inter le aver ( List . of ( output )) ĊĠĠĠ Ġval Ġinput Ġ= Ġbyte ArrayOf ( 0 x 0 1 , Ġ 0 x 0 2 , Ġ 0 x 0 3 , Ġ 0 x 0 4 ) ĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġinter le aver . write ( input ) ĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertTrue ( input . content Equals ( output . bytes )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` inter le aver Ġwith Ġtwo Ġoutputs Ġsplits Ġbytes Ġeven ly `() Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġoutput 0 Ġ= ĠBinary Output Mock () ĊĠĠĠ Ġval Ġoutput 1 Ġ= ĠBinary Output Mock () ĊĠĠĠ Ġval Ġinter le aver Ġ= ĠBinary Inter le aver ( List . of ( output 0 , Ġoutput 1 )) ĊĠĠĠ Ġval Ġinput Ġ= Ġbyte ArrayOf ( 0 x 0 1 , Ġ 0 x 0 2 , Ġ 0 x 0 3 , Ġ 0 x 0 4 ) ĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġinter le aver . write ( input ) ĊĠĠĠ Ġ// Ġthen ĊĠĠĠ ĠassertTrue ( byte ArrayOf ( 0 x 0 1 , Ġ 0 x 0 3 ). content Equals ( output 0 . bytes )) ĊĠĠĠ ĠassertTrue ( byte ArrayOf ( 0 x 0 2 , Ġ 0 x 0 4 ). content Equals ( output 1 . bytes )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` inter le aver Ġthrows Ġexception Ġif Ġbytes Ġcannot Ġbe Ġsplit Ġeven ly `() Ġ{ ĊĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġval Ġoutput 0 Ġ= ĠBinary Output Mock () ĊĠĠĠ Ġval Ġoutput 1 Ġ= ĠBinary Output Mock () ĊĠĠĠ Ġval Ġinter le aver Ġ= ĠBinary Inter le aver ( List . of ( output 0 , Ġoutput 1 )) ĊĠĠĠ Ġval Ġinput Ġ= Ġbyte ArrayOf ( 0 x 0 1 , Ġ 0 x 0 2 , Ġ 0 x 0 3 ) ĊĠĠĠ Ġ// Ġwhen ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġinter le aver . write ( input ) ĊĠĠĠĠĠ Ġfail < Unit >(" Should Ġfail ") ĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegal Input Exception ) Ġ{} ĊĠ Ġ} Ċ } Ċ