% Testing the parser and printer

% Every syntactic construct

1;;
x;;
true;;
false;;
();;
fail;;
3.14159;;

if x then y else z;;
let x = y in z;;
let type a = int in x;;
fun f(x) is y;;
case x of in1 y1 => z1 | in2 y2 => z2;;
case x of in2 y2 => z2 | in1 y1 => z1;;
case x of in1 y1 => z1 | in2 y2 => z2 | in3 y3 => z3;;
letcc x in y;;
throw x to y;;
try x ow y;;
gen a in x;;
pack a, x;;
unpack a, x = y in z;;

x;y;;
x,y;;
x,y,z;;
(x,y),z;;
x,(y,z);;
x:a;;
x:=y;;
x=y;;
x<y;;
x+y;;
x-y;;
x+.y;;
x*y;;
x mod y;;
x*.y;;

~x;;
abort x;;
in1 x;;
in2 x;;
in3 x;;
itof x;;
sqrt x;;
ref x;;
!x;;
roll x;;
unroll x;;

x y;;

x.1;;
x.2;;
x.3;;
x[a];;

x : int->int;;
x : int+int;;
x : int+int+int;;
x : (int+int)+int;;
x : int+(int+int);;
x : int*int;;
x : int*int*int;;
x : (int*int)*int;;
x : int*(int*int);;
x : int cont;;
x : int ref;;
x : (int);;
x : int;;
x : bool;;
x : 0;;
x : 1;;
x : float;;
x : a;;
x : !a b;;
x : ?a b;;
x : #a b;;

% Every precedence relation

1,2,3;;
(1,2),3;;
1,(2,3);;

1,2=3;;
1=2,3;;
(1,2)=3;;
1,(2=3);;
(1=2),3;;
1=(2,3);;

1=2=3;;
(1=2)=3;;
1=(2=3);;

% Okay, I got bored here

~~1 2;;
(~~1) 2;;
~(~1 2);;
~(~1) 2;;
~~(1 2);;

2.1 3.1;;
(2.1 3).1;;
2.1 (3.1);;

case x of in1 x1 => (case y of in1 y1 => y1' | in2 y2 => y2')
        | in2 x2 => (case z of in1 z1 => z1' | in2 z2 => z2');;
case x of in1 x1 => (case y of in1 y1 => y1' | in2 y2 => y2')
        | in2 x2 => case z of in1 z1 => z1' | in2 z2 => z2';;
case x of in1 x1 => (let y=1 in y)
        | in2 x2 => (let z=1 in z);;
case x of in1 x1 => let y=1 in y
        | in2 x2 => let z=1 in z;;
x : 1 * (!a a * a);;
x : 1 * !a a * a;;
x : (!a a * a) * 1;;
x : !a a * a * 1;;
x : 1 * (a * a);;
x : 1 * a * a;;
x : (!a a) cont * 1;;
x : (!a a cont) * 1;;
x : !a a cont * 1;;
