From c984516edb66738bdf44cd32bf7694dc04809c7f Mon Sep 17 00:00:00 2001 From: David Grant Date: Fri, 21 Jun 2024 08:28:11 -0700 Subject: [PATCH] Add exceptional test cases. Make case table less crazy. --- internal/parser/lexer_test.go | 96 +++++++++++------------------------ 1 file changed, 29 insertions(+), 67 deletions(-) diff --git a/internal/parser/lexer_test.go b/internal/parser/lexer_test.go index 6a65fae..fc1793c 100644 --- a/internal/parser/lexer_test.go +++ b/internal/parser/lexer_test.go @@ -316,77 +316,39 @@ func TestNumber1epExc(t *testing.T) { } func TestNumberSeparators(t *testing.T) { - cases := [...]struct { + type numcase struct { input string err string tokens Tokens - }{ - { - input: "123_456", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "123456"}}, - }, - { - input: "1_750_000", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "1750000"}}, - }, - { - input: "1_2_3", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "123"}}, - }, - { - input: "3.141_592", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "3.141592"}}, - }, - { - input: "01_100", - err: "", - tokens: Tokens{ - {kind: tokenNumber, data: "0"}, - {kind: tokenNumber, data: "1100"}, - }, - }, - { - input: "1_200.0", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "1200.0"}}, - }, - { - input: "0e1_01", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "0e101"}}, - }, - { - input: "10_10e3", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "1010e3"}}, - }, - { - input: "2_3e1_2", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "23e12"}}, - }, - { - input: "1.1_2e100", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "1.12e100"}}, - }, - { - input: "1.1e-10_1", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "1.1e-101"}}, - }, - { - input: "9.109_383_56e-31", - err: "", - tokens: Tokens{{kind: tokenNumber, data: "9.10938356e-31"}}, - }, } - - for _, c := range cases { + mknumcase := func(input string, err string, tokens Tokens) numcase { + return numcase{input, err, tokens} + } + for _, c := range [...]numcase{ + mknumcase("123_456", "", Tokens{{kind: tokenNumber, data: "123456"}}), + mknumcase("1_750_000", "", Tokens{{kind: tokenNumber, data: "1750000"}}), + mknumcase("1_2_3", "", Tokens{{kind: tokenNumber, data: "123"}}), + mknumcase("3.141_592", "", Tokens{{kind: tokenNumber, data: "3.141592"}}), + mknumcase("01_100", "", Tokens{ + {kind: tokenNumber, data: "0"}, + {kind: tokenNumber, data: "1100"}, + }), + mknumcase("1_200.0", "", Tokens{{kind: tokenNumber, data: "1200.0"}}), + mknumcase("0e1_01", "", Tokens{{kind: tokenNumber, data: "0e101"}}), + mknumcase("10_10e3", "", Tokens{{kind: tokenNumber, data: "1010e3"}}), + mknumcase("2_3e1_2", "", Tokens{{kind: tokenNumber, data: "23e12"}}), + mknumcase("1.1_2e100", "", Tokens{{kind: tokenNumber, data: "1.12e100"}}), + mknumcase("1.1e-10_1", "", Tokens{{kind: tokenNumber, data: "1.1e-101"}}), + mknumcase("9.109_383_56e-31", "", Tokens{{kind: tokenNumber, data: "9.10938356e-31"}}), + mknumcase("123456_!", "snippet:1:8 Couldn't lex number, junk after '_': '!'", Tokens{}), + mknumcase("123__456", "snippet:1:5 Couldn't lex number, multiple consecutive _'s", Tokens{}), + mknumcase("1_200_.0", "snippet:1:7 Couldn't lex number, junk after '_': '.'", Tokens{}), + mknumcase("1_200._0", "snippet:1:7 Couldn't lex number, junk after decimal point: '_'", Tokens{}), + mknumcase("1_200_e2", "snippet:1:7 Couldn't lex number, junk after '_': 'e'", Tokens{}), + mknumcase("1_200e_2", "snippet:1:7 Couldn't lex number, junk after 'E': '_'", Tokens{}), + mknumcase("200e-_2", "snippet:1:6 Couldn't lex number, junk after exponent sign: '_'", Tokens{}), + mknumcase("200e+_2", "snippet:1:6 Couldn't lex number, junk after exponent sign: '_'", Tokens{}), + } { t.Run(fmt.Sprintf("number %s", c.input), func(t *testing.T) { SingleTest(t, c.input, c.err, c.tokens) })