import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġsilent orb . imp . parsing . lexer . Rune Ċ import Ġsilent orb . imp . parsing . lexer . strip Whitespace Ċ import Ġsilent orb . imp . parsing . lexer . tokenize Ċ Ċ class ĠLex ing Test Ġ{ ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Parse An EmptyString () Ġ{ ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ("") ĊĠĠĠ ĠassertEquals ( 0 , Ġtokens . size ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Parse Empty Whitespace () Ġ{ ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize (" ĠĠ Ġ") ĊĠĠĠ ĠassertEquals ( 1 , Ġtokens . size ) ĊĠĠĠ ĠassertEquals ( Rune . whitespace , Ġtokens [ 0 ]. rune ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġreturns Pro per Ranges () Ġ{ ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize (" let ") ĊĠĠĠ Ġval Ġrange Ġ= Ġtokens . first (). range ĊĠĠĠ ĠassertEquals ( 0 , Ġrange . start . index ) ĊĠĠĠ ĠassertEquals ( 3 , Ġrange . end . index ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Token ize With Int () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" output Ġ= Ġ 1 0 " ĊĊĠĠĠ Ġval Ġtokens Ġ= Ġstrip Whitespace ( tokenize ( code )) ĊĠĠĠ ĠassertEquals ( 3 , Ġtokens . size ) ĊĠĠĠ ĠassertEquals (" output ", Ġtokens . first (). value ) ĊĠĠĠ ĠassertEquals ( tokens [ 1 ]. range . start . index Ġ+ Ġ 1 , Ġtokens [ 1 ]. range . end . index ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Token ize Literal Zero () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" 0 " ĊĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertEquals ( 1 , Ġtokens . size ) ĊĠĠĠ ĠassertEquals ( Rune . literal Integer , Ġtokens . first (). rune ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Token ize Comments () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ"-- ĠThis Ġis Ġa Ġcomment " ĊĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertEquals ( 1 , Ġtokens . size ) ĊĠĠĠ ĠassertEquals ( Rune . comment , Ġtokens . first (). rune ) ĊĠĠĠ ĠassertEquals ("-- ĠThis Ġis Ġa Ġcomment ", Ġtokens . first (). value ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġprevents Token izing Zero Leading Integer () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" 0 1 " ĊĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertTrue ( tokens . any Ġ{ Ġit . rune Ġ== ĠRun e . bad Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Token ize With Float () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" output Ġ= Ġ 1 0 . 3 " ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertEquals ( 5 , Ġtokens . size ) ĊĠĠĠ ĠassertEquals (" output ", Ġtokens . first (). value ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġcan Token ize With Parent hesis () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" output Ġ= Ġ( 1 0 )" ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertEquals ( 7 , Ġtokens . size ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġsupports Import ing Syntax () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" ĊĠĠĠĠĠ Ġimport Ġsilent orb . imp . test . simple Function ĊĠĠĠĠĠ Ġimport Ġsilent orb . imp . test .* ĊĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠĠĠ ĠassertEquals ( 1 , Ġtokens . count Ġ{ Ġit . rune Ġ== ĠRun e . operator Ġ}) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġprevents Numbers B le ed ing Into Identifiers () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" 1 c " ĊĊĠĠĠ Ġval Ġtokens Ġ= Ġtokenize ( code ) ĊĠĠĠ ĠassertEquals ( 1 , Ġtokens . size ) ĊĠĠĠ ĠassertTrue ( tokens . any Ġ{ Ġit . rune Ġ== ĠRun e . bad Ġ}) ĊĠ Ġ} Ċ } Ċ