summaryrefslogtreecommitdiff
path: root/testsuite/tests/typing-private/private.ml.principal.reference
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/typing-private/private.ml.principal.reference')
-rw-r--r--testsuite/tests/typing-private/private.ml.principal.reference125
1 files changed, 125 insertions, 0 deletions
diff --git a/testsuite/tests/typing-private/private.ml.principal.reference b/testsuite/tests/typing-private/private.ml.principal.reference
new file mode 100644
index 0000000000..03e7957016
--- /dev/null
+++ b/testsuite/tests/typing-private/private.ml.principal.reference
@@ -0,0 +1,125 @@
+
+# module Foobar : sig type t = private int end
+# module F0 : sig type t = private int end
+# Characters 21-22:
+ let f (x : F0.t) = (x : Foobar.t);; (* fails *)
+ ^
+Error: This expression has type F0.t but an expression was expected of type
+ Foobar.t
+# module F = Foobar
+# val f : F.t -> Foobar.t = <fun>
+# module M : sig type t = < m : int > end
+# module M1 : sig type t = private < m : int; .. > end
+# module M2 : sig type t = private < m : int; .. > end
+# Characters 19-20:
+ fun (x : M1.t) -> (x : M2.t);; (* fails *)
+ ^
+Error: This expression has type M1.t but an expression was expected of type
+ M2.t
+# module M3 : sig type t = private M1.t end
+# - : M3.t -> M1.t = <fun>
+# - : M3.t -> M.t = <fun>
+# Characters 44-46:
+ module M4 : sig type t = private M3.t end = M2;; (* fails *)
+ ^^
+Error: Signature mismatch:
+ Modules do not match:
+ sig type t = M2.t end
+ is not included in
+ sig type t = private M3.t end
+ Type declarations do not match:
+ type t = M2.t
+ is not included in
+ type t = private M3.t
+# Characters 44-45:
+ module M4 : sig type t = private M3.t end = M;; (* fails *)
+ ^
+Error: Signature mismatch:
+ Modules do not match:
+ sig type t = < m : int > end
+ is not included in
+ sig type t = private M3.t end
+ Type declarations do not match:
+ type t = < m : int >
+ is not included in
+ type t = private M3.t
+# Characters 44-46:
+ module M4 : sig type t = private M3.t end = M1;; (* might be ok *)
+ ^^
+Error: Signature mismatch:
+ Modules do not match:
+ sig type t = M1.t end
+ is not included in
+ sig type t = private M3.t end
+ Type declarations do not match:
+ type t = M1.t
+ is not included in
+ type t = private M3.t
+# module M5 : sig type t = private M1.t end
+# Characters 53-55:
+ module M6 : sig type t = private < n:int; .. > end = M1;; (* fails *)
+ ^^
+Error: Signature mismatch:
+ Modules do not match:
+ sig type t = M1.t end
+ is not included in
+ sig type t = private < n : int; .. > end
+ Type declarations do not match:
+ type t = M1.t
+ is not included in
+ type t = private < n : int; .. >
+# Characters 69-118:
+ struct type t = int let f (x : int) = (x : t) end;; (* must fail *)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Error: Signature mismatch:
+ Modules do not match:
+ sig type t = int val f : int -> t end
+ is not included in
+ sig type t = private Foobar.t val f : int -> t end
+ Type declarations do not match:
+ type t = int
+ is not included in
+ type t = private Foobar.t
+# module M : sig type t = private T of int val mk : int -> t end
+# module M1 : sig type t = M.t val mk : int -> t end
+# module M2 : sig type t = M.t val mk : int -> t end
+# module M3 : sig type t = M.t val mk : int -> t end
+# Characters 26-44:
+ type t = M.t = T of int
+ ^^^^^^^^^^^^^^^^^^
+Error: This variant or record definition does not match that of type M.t
+ A private type would be revealed.
+# module M5 : sig type t = M.t = private T of int val mk : int -> t end
+# module M6 : sig type t = private T of int val mk : int -> t end
+# module M' :
+ sig type t_priv = private T of int type t = t_priv val mk : int -> t end
+# module M3' : sig type t = M'.t val mk : int -> t end
+# module M : sig type 'a t = private T of 'a end
+# module M1 : sig type 'a t = 'a M.t = private T of 'a end
+# module Test : sig type t = private A end
+module Test2 : sig type t = Test.t = private A end
+# val f : Test.t -> Test2.t = <fun>
+# val f : Test2.t -> unit = <fun>
+# Characters 8-15:
+ let a = Test2.A;; (* fail *)
+ ^^^^^^^
+Error: Cannot create values of the private type Test2.t
+# * Characters 148-171:
+ module Test2 : module type of Test with type t = private Test.t = Test;;
+ ^^^^^^^^^^^^^^^^^^^^^^^
+Warning 3: deprecated feature: spurious use of private
+module Test2 : sig type t = Test.t = private A end
+# type t = private < x : int; .. >
+# type t = private < x : int; .. >
+# type t = private < x : int >
+# type t = private < x : int >
+# Characters -1--1:
+ type 'a t = private < x : int; .. > as 'a;;
+
+Error: Type declarations do not match:
+ type 'a t = private 'a constraint 'a = < x : int; .. >
+ is not included in
+ type 'a t
+ Their constraints differ.
+# type 'a t = private 'a constraint 'a = < x : int; .. >
+#