package Ġlex ical Tests Ċ Ċ import Ġcom . nat pr y ce . ham k rest . assertion . assertThat Ċ import Ġcom . nat pr y ce . ham k rest . equalTo Ċ import Ġlexer . Position al Token Ċ import Ġlexer . Token Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠToken Test Ġ{ ĊĊĠĠĠ Ġ@ org . junit . jupiter . api . Test ĊĠĠĠ Ġfun Ġtest Equals Tokens () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Identifier (" a "). hashCode (), ĠToken . Identifier (" a "). hashCode ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Identifier (" a "). component 1 (), ĠToken . Identifier (" a "). component 1 ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Text (" a "). hashCode (), ĠToken . Literal . Text (" a "). hashCode ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Text (" a "). component 1 (), ĠToken . Literal . Text (" a "). component 1 ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Number ( 1 ). hashCode (), ĠToken . Literal . Number ( 1 ). hashCode ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Number ( 1 ). component 1 (), ĠToken . Literal . Number ( 1 ). component 1 ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Bool ( true ). hashCode (), ĠToken . Literal . Bool ( true ). hashCode ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Bool ( true ). toString (), ĠToken . Literal . Bool ( true ). toString ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Token . Literal . Bool ( true ). component 1 (), ĠToken . Literal . Bool ( true ). component 1 ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . jupiter . api . Test ĊĠĠĠ Ġfun Ġtest Tokens () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= ĠlistOf (" Identifier ", Ġ"\" Text \"", Ġ" 5 ", Ġ" true ", Ġ" var ", Ġ" num ", Ġ" bool ", Ġ" text ", Ġ" func ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tuple ", Ġ" list ", Ġ"{ ", Ġ" }", Ġ"\ n ", Ġ"[", Ġ" ]", Ġ" (", Ġ" )", Ġ",", Ġ" :", Ġ"=", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" return "). map Indexed Ġ{ Ġindex , Ġle xe me Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( lex eme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Identifier " Ġ-> ĠToken . Identifier ( lex eme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" Text \"" Ġ-> ĠToken . Literal . Text ( lex eme . drop ( 1 ). drop Last ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 5 " Ġ-> ĠToken . Literal . Number ( lex eme . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" true " Ġ-> ĠToken . Literal . Bool ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" return " Ġ-> ĠToken . Return ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tuple " Ġ-> ĠToken . Type . Tuple ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" bool " Ġ-> ĠToken . Type . Bool ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text " Ġ-> ĠToken . Type . Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" func " Ġ-> ĠToken . Type . Func ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" list " Ġ-> ĠToken . Type . List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" none " Ġ-> ĠToken . Type . None ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" var " Ġ-> ĠToken . Type . Var ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" num " Ġ-> ĠToken . Type . Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ-> ĠToken . Special Char . EndOf Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ":" Ġ-> ĠToken . Special Char . Colon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" {" Ġ-> ĠToken . Special Char . Block Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" Ġ-> ĠToken . Special Char . Block End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[" Ġ-> ĠToken . Special Char . Square Bracket Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ]" Ġ-> ĠToken . Special Char . Square Bracket End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"(" Ġ-> ĠToken . Special Char . Parent heses Start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ")" Ġ-> ĠToken . Special Char . Parent heses End ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"," Ġ-> ĠToken . Special Char . List Separator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"=" Ġ-> ĠToken . Special Char . Equals ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Unexpected Ġle xe me Ġ'$ lex eme ' Ġin Ġtoken Ġtest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPosition al Token ( it , Ġindex , Ġ 0 , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtokens . map Ġ{ Ġit . token Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Identifier Ġ-> ĠassertThat ( it . value , ĠequalTo (" Identifier ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Literal . Text Ġ-> ĠassertThat ( it . value , ĠequalTo (" Text ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Literal . Number Ġ-> ĠassertThat ( it . value , ĠequalTo ( 5 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToken . Literal . Bool Ġ-> ĠassertThat ( it . value , ĠequalTo ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( tokens . sum By Ġ{ Ġit . line Number Ġ}, ĠequalTo (( 0 Ġuntil Ġtokens . size ). sum ())) ĊĠĠĠ Ġ} Ċ } Ċ