package Ġorg . lex em . ang mar . parser . literals Ċ Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . junit . jupiter . params .* Ċ import Ġorg . junit . jupiter . params . provider .* Ċ import Ġorg . lex em . ang mar .* Ċ import Ġorg . lex em . ang mar . io . readers .* Ċ import Ġorg . lex em . ang mar . parser .* Ċ import Ġorg . lex em . ang mar . parser . commons .* Ċ import Ġjava . util . stream .* Ċ import Ġkotlin . streams .* Ċ Ċ internal Ġclass ĠBit list Element Node Test Ġ{ ĊĠĠĠ Ġ// ĠPARAMETER S Ġ------------------------------------------------ ------------- ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest Binary Expression Ġ= Ġ" 0 1 0 1 1 1 0 _ 0 1 1 1 0 _ 0 1 " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest Oct al Expression Ġ= Ġ" 0 1 _ 2 3 4 5 6 _ 7 6 5 4 _ 3 2 _ 1 0 " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtest Hex adecimal Expression Ġ= Ġ" 0 _ 1 2 3 _ 4 5 6 _ 7 8 9 a _ bc de _ f AB CD _ EF " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġprovide Number Elements (): ĠStream < Arguments > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( radix Ġin ĠlistOf ( 2 , Ġ 8 , Ġ 1 6 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠlistOf ( 0 , Ġ 1 , Ġ 2 5 , Ġ 2 5 5 6 , Ġ 7 7 7 , Ġ 5 8 9 1 6 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Text Ġ= Ġi . toString ( radix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( Arguments . of ( num Text , Ġradix )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Text . length Ġ> Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( Arguments . of ( num Text . substring ( 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Text . length Ġ/ Ġ 2 ) Ġ+ ĠNumber Node . digit Separator Ġ+ Ġnum Text . substring ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Text . length Ġ/ Ġ 2 ), Ġradix )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . as Stream () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠA UX ĠMETHO DS Ġ-------------------------------------------------------- ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Test Expression ( node : ĠParser Node , Ġnumber : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertTrue ( node Ġis ĠBit list Element Node , Ġ" The Ġnode Ġis Ġnot Ġa ĠBit list Element Node ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġas ĠBit list Element Node ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( number . replace ( Number Node . digit Separator , Ġ""), Ġnode . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġnumber Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertNull ( node . expression , Ġ" The Ġexpression Ġproperty Ġmust Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠTEST S Ġ---------------------------------------------------------------- -- ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" provide Number Elements ") ĊĠĠĠ Ġfun Ġ` parse Ġcorrect Ġbit list Ġelement `( text : ĠString , Ġradix : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠLex em Parser ( IO String Reader . from ( text )) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠBit list Element Node . parse ( parser , ĠParser Node . Companion . Empty Parser Node , Ġ 0 , Ġradix ) ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertNotNull ( res , Ġ" The Ġinput Ġhas Ġnot Ġbeen Ġcorrectly Ġparsed ") ĊĠĠĠĠĠĠĠ Ġres Ġas ĠBit list Element Node ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( text . replace ( Number Node . digit Separator , Ġ""), Ġres . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġnumber Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( radix , Ġres . radix , Ġ" The Ġradix Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( res . expression , Ġ" The Ġexpression Ġproperty Ġmust Ġbe Ġnull ") ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( text . length , Ġparser . reader . current Position (), Ġ" The Ġparser Ġdid Ġnot Ġadvance Ġthe Ġcursor ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Value Source ( strings Ġ= Ġ[ Esc aped Expression Node Test . test Expression ]) ĊĠĠĠ Ġfun Ġ` parse Ġcorrect Ġbit list Ġelement `( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠLex em Parser ( IO String Reader . from ( text )) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠBit list Element Node . parse ( parser , ĠParser Node . Companion . Empty Parser Node , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ) Ġ// ĠThe Ġradix Ġdoes Ġnot Ġmatter ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertNotNull ( res , Ġ" The Ġinput Ġhas Ġnot Ġbeen Ġcorrectly Ġparsed ") ĊĠĠĠĠĠĠĠ Ġres Ġas ĠBit list Element Node ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( res . number , Ġ" The Ġnumber Ġproperty Ġmust Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertNotNull ( res . expression , Ġ" The Ġexpression Ġproperty Ġcannot Ġbe Ġnull ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 2 , Ġres . radix , Ġ" The Ġradix Ġproperty Ġis Ġincorrect ") ĊĠĠĠĠĠĠĠ ĠE sc aped Expression Node Test . check Test Expression ( res . expression !! ) ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( text . length , Ġparser . reader . current Position (), Ġ" The Ġparser Ġdid Ġnot Ġadvance Ġthe Ġcursor ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Value Source ( strings Ġ= Ġ[ "" ]) ĊĠĠĠ Ġfun Ġ` not Ġparse Ġthe Ġnode `( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparser Ġ= ĠLex em Parser ( IO String Reader . from ( text )) ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠObject Element Node . parse ( parser , ĠParser Node . Companion . Empty Parser Node , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertNull ( res , Ġ" The Ġinput Ġhas Ġincorrectly Ġparsed Ġanything ") ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 0 , Ġparser . reader . current Position (), Ġ" The Ġparser Ġmust Ġnot Ġadvance Ġthe Ġcursor ") ĊĠĠĠ Ġ} Ċ } Ċ