diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/test.sh | 1 | ||||
-rw-r--r-- | tests/types.toc | 48 | ||||
-rw-r--r-- | tests/types_expected | 13 |
3 files changed, 62 insertions, 0 deletions
diff --git a/tests/test.sh b/tests/test.sh index e6e8fe5..1168e5b 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -2,6 +2,7 @@ tests='bf control_flow +types defer sizeof new diff --git a/tests/types.toc b/tests/types.toc new file mode 100644 index 0000000..4ef55e8 --- /dev/null +++ b/tests/types.toc @@ -0,0 +1,48 @@ +#include "io.toc", io; +#include "mem.toc"; + + +main ::= fn() { + nums := news(int, 10); + for x, i := &nums { + *x = i*i; + } + l := slice_to_ll(nums); + p := &l; + while p { + io.puti(p.head); + p = p.tail; + } + f: Foo; + f.k = -173; + f.b = new(Bar); + f.b.f.b = new(Bar); + f.b.f.b.f.k = 9; + io.puti(f.k); + io.puti(f.b.f.k); + io.puti(f.b.f.b.f.k); +} + +slice_to_ll ::= fn(t::=, slice: []t) use ll: LinkedList(t) { + head = slice[0]; + if slice.len == 1 { + tail = 0 as &LinkedList(t); + } else { + tail = new(LinkedList(t)); + *tail = slice_to_ll(slice[1:]); + } +} + +LinkedList ::= struct (of :: Type) { + head: of; + tail: &LinkedList(of); +} + +Foo ::= struct { + k: int; + b: &Bar; +} + +Bar ::= struct { + f: Foo; +} diff --git a/tests/types_expected b/tests/types_expected new file mode 100644 index 0000000..eef051c --- /dev/null +++ b/tests/types_expected @@ -0,0 +1,13 @@ +0 +1 +4 +9 +16 +25 +36 +49 +64 +81 +-173 +0 +9 |