diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/functorMadness.ur | 18 | ||||
-rw-r--r-- | tests/functorMania.ur | 36 |
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/functorMadness.ur b/tests/functorMadness.ur new file mode 100644 index 00000000..c7ddeaca --- /dev/null +++ b/tests/functorMadness.ur @@ -0,0 +1,18 @@ +functor F(M : sig end) = struct + fun f () = f () + + functor G(M : sig end) = struct + fun g () = f () + end +end + +structure M1 = F(struct end) +structure M2 = F(struct end) + +structure N1 = M1.G(struct end) +structure N2 = M2.G(struct end) + +fun main () : transaction page = + return (N1.g ()); + return (N2.g ()); + return <xml/> diff --git a/tests/functorMania.ur b/tests/functorMania.ur new file mode 100644 index 00000000..c11ff473 --- /dev/null +++ b/tests/functorMania.ur @@ -0,0 +1,36 @@ +functor F1(M : sig type t end) = struct + type t = M.t + fun g () : M.t = g () + fun f () = g () +end +functor F2(M : sig type t end) = F1(M) +functor F3(M : sig type t end) = F2(M) + +functor F4(M : sig end) = F1(struct type t = int end) +functor F5(M : sig end) = F2(struct type t = int end) +functor F6(M : sig end) = F3(struct type t = int end) + +functor F7(M : sig end) = F1(struct type t = string end) +functor F8(M : sig end) = F2(struct type t = string end) +functor F9(M : sig end) = F3(struct type t = string end) + +structure M1 = F1(struct type t = string end) +structure M2 = F2(struct type t = string end) +structure M3 = F3(struct type t = string end) + +structure M4 = F4(struct end) +structure M5 = F5(struct end) +structure M6 = F6(struct end) + +structure M7 = F7(struct end) +structure M8 = F8(struct end) +structure M9 = F9(struct end) + +fun loop x : unit = loop (M1.f (), M2.f (), M3.f (), + M4.f (), M5.f (), M6.f (), + M7.f (), M8.f (), M9.f ()) + +fun main () : transaction page = + x <- error <xml/>; + u <- return (loop x); + return <xml/> |