package Ġcom . mth aler . ap ar ser . common Ċ Ċ import Ġcom . mth aler . ap ar ser . and Ċ import Ġcom . mth aler . ap ar ser . tokens . char Literal Ċ import Ġcom . mth aler . ap ar ser . util . Result Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ Ċ class ĠPar sers Test : ĠString Spec ({ ĊĊĠĠĠ Ġ" ws " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġws ( com . mth aler . ap ar ser . tokens . number ) ĊĠĠĠĠĠĠĠ Ġval Ġplus Ġ= Ġws ( char Literal ('+ ')) ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġn Ġand Ġplus Ġand Ġn ĊĠĠĠĠĠĠĠ Ġp (" 3 Ġ+ Ġ 4 ") ĠshouldBe ĠResult . OK ( Pair ( Pair (" 3 ", Ġ"+ "), Ġ" 4 "), Ġ"") ĊĠĠĠĠĠĠĠ Ġp (" Ġ 3 Ġ+ Ġ 4 Ġ") ĠshouldBe ĠResult . OK ( Pair ( Pair (" 3 ", Ġ"+ "), Ġ" 4 "), Ġ"") ĊĠĠĠĠĠĠĠ Ġp (" 3 Ġ+ Ġ 4 foo ") ĠshouldBe ĠResult . OK ( Pair ( Pair (" 3 ", Ġ"+ "), Ġ" 4 "), Ġ" foo ") ĊĠĠĠĠĠĠĠ Ġp (" 3 Ġ+ Ġ 4 Ġfoo ") ĠshouldBe ĠResult . OK ( Pair ( Pair (" 3 ", Ġ"+ "), Ġ" 4 "), Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" +" Ġ{ ĊĠĠĠĠĠĠĠ Ġplus ("+ ") ĠshouldBe ĠResult . OK ("+ ", Ġ"") ĊĠĠĠĠĠĠĠ Ġplus ("+ Ġ 5 ") ĠshouldBe ĠResult . OK ("+ ", Ġ" 5 ") ĊĠĠĠĠĠĠĠ Ġplus (" foo ") ĠshouldBe ĠResult . Err ("' +' ", Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ"-" Ġ{ ĊĠĠĠĠĠĠĠ Ġminus ("- ") ĠshouldBe ĠResult . OK ("- ", Ġ"") ĊĠĠĠĠĠĠĠ Ġminus (" Ġ- Ġ") ĠshouldBe ĠResult . OK ("- ", Ġ"") ĊĠĠĠĠĠĠĠ Ġminus ("- Ġ 5 ") ĠshouldBe ĠResult . OK ("- ", Ġ" 5 ") ĊĠĠĠĠĠĠĠ Ġminus (" foo ") ĠshouldBe ĠResult . Err ("' - '", Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ"*" Ġ{ ĊĠĠĠĠĠĠĠ Ġtimes ("* ") ĠshouldBe ĠResult . OK ("* ", Ġ"") ĊĠĠĠĠĠĠĠ Ġtimes ("* Ġ 5 ") ĠshouldBe ĠResult . OK ("* ", Ġ" 5 ") ĊĠĠĠĠĠĠĠ Ġtimes (" foo ") ĠshouldBe ĠResult . Err ("' * '", Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ"/" Ġ{ ĊĠĠĠĠĠĠĠ Ġdiv ("/") ĠshouldBe ĠResult . OK ("/", Ġ"") ĊĠĠĠĠĠĠĠ Ġdiv ("/ Ġ 5 ") ĠshouldBe ĠResult . OK ("/", Ġ" 5 ") ĊĠĠĠĠĠĠĠ Ġdiv (" foo ") ĠshouldBe ĠResult . Err ("' /' ", Ġ" foo ") ĊĠĠĠ Ġ} Ċ })