-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathdesugar_test.go
43 lines (40 loc) · 2.94 KB
/
desugar_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package frontend
import "testing"
import "github.com/timtadh/data-structures/test"
func TestDesugarRanges_any(x *testing.T) {
t := (*test.T)(x)
ast, err := Parse([]byte("."))
if err != nil {
t.Fatal(err)
}
t.Log(ast.String())
parsed := "(Match (Concat (Range 0 255), (EOS)))"
if ast.String() != parsed {
t.Log(ast.String())
t.Log(parsed)
t.Error("Did not parse correctly")
}
// asserts this doesn't infinte loop
DesugarRanges(ast)
}
func TestDesugarRanges(x *testing.T) {
t := (*test.T)(x)
ast, err := Parse([]byte("(([a-z]+[A-Z])*[0-9])?wizard"))
if err != nil {
t.Fatal(err)
}
t.Log(ast.String())
parsed := "(Match (Concat (Concat (? (Concat (* (Concat (+ (Range 97 122)), (Range 65 90))), (Range 48 57))), (Character w), (Character i), (Character z), (Character a), (Character r), (Character d)), (EOS)))"
if ast.String() != parsed {
t.Log(ast.String())
t.Log(parsed)
t.Error("Did not parse correctly")
}
ast = DesugarRanges(ast)
desugared := "(Match (Concat (Concat (? (Concat (* (Concat (+ (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Character a), (Character b)), (Character c)), (Character d)), (Character e)), (Character f)), (Character g)), (Character h)), (Character i)), (Character j)), (Character k)), (Character l)), (Character m)), (Character n)), (Character o)), (Character p)), (Character q)), (Character r)), (Character s)), (Character t)), (Character u)), (Character v)), (Character w)), (Character x)), (Character y)), (Character z))), (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Character A), (Character B)), (Character C)), (Character D)), (Character E)), (Character F)), (Character G)), (Character H)), (Character I)), (Character J)), (Character K)), (Character L)), (Character M)), (Character N)), (Character O)), (Character P)), (Character Q)), (Character R)), (Character S)), (Character T)), (Character U)), (Character V)), (Character W)), (Character X)), (Character Y)), (Character Z)))), (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Alternation (Character 0), (Character 1)), (Character 2)), (Character 3)), (Character 4)), (Character 5)), (Character 6)), (Character 7)), (Character 8)), (Character 9)))), (Character w), (Character i), (Character z), (Character a), (Character r), (Character d)), (EOS)))"
if ast.String() != desugared {
t.Log(ast.String())
t.Log(desugared)
t.Error("Did not desugar correctly")
}
}