blob: 90a6494c6e33d80bbfb918fed51f9cca3ecc444e [file] [log] [blame]
// Copyright 2017 The Wuffs Authors.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
package ast_test
import (
"testing"
"github.com/google/wuffs/lang/parse"
t "github.com/google/wuffs/lang/token"
)
func TestString(tt *testing.T) {
const filename = "test.wuffs"
testCases := []string{
"1",
"x",
"f()",
"f(a: i)",
"f(a: i, b: j)",
"f(a: i, b: j) + 1",
"f(a: i, b: j)(c: k)",
"f(a: i, b: j)(c: k, d: l, e: m + 2) + 3",
"x[i]",
"x[i][j]",
"x[i .. j]",
"x[i](arg: j)",
"x(arg: i)[j]",
"x.y",
"x.y.z.a",
"+x",
"-(x + y)",
"not x",
"not not x",
"+++-x",
"x + 42",
"x and (y < z)",
"x & (y as base.u8)",
"x * ((a / b) - (i / j))",
"x + y + z",
"x + (i * j.k[l] * (-m << 4) * (n & o(o0: p, o1: q[.. r.s + 5]))) + z",
"x as base.bool",
"x as base.u32",
"x as base.u32[1 ..=]",
"x as base.u32[..= 2]",
"x as base.u32[1 ..= 2]",
"x as T",
"x as T",
"x as pkg.T",
"x as ptr T",
"x as array[4] T",
"x as array[8 + (2 * N)] ptr array[4] ptr base.u8[10 ..= 20]",
}
tm := &t.Map{}
for _, tc := range testCases {
tokens, _, err := t.Tokenize(tm, filename, []byte(tc))
if err != nil {
tt.Errorf("Tokenize(%q): %v", tc, err)
continue
}
expr, err := parse.ParseExpr(tm, filename, tokens, nil)
if err != nil {
tt.Errorf("ParseExpr(%q): %v", tc, err)
continue
}
got := expr.Str(tm)
if got != tc {
tt.Errorf("got %q, want %q", got, tc)
continue
}
}
}