|
@@ -0,0 +1,45 @@
|
|
|
+module Get_type = Qsp_syntax.Get_type
|
|
|
+module T = Qsp_syntax.T
|
|
|
+
|
|
|
+let _position = (Lexing.dummy_pos, Lexing.dummy_pos)
|
|
|
+
|
|
|
+let type_of : Get_type.t Alcotest.testable =
|
|
|
+ Alcotest.testable Get_type.pp Get_type.equal
|
|
|
+
|
|
|
+let add_number () =
|
|
|
+ let actual =
|
|
|
+ Get_type.boperator _position T.Plus
|
|
|
+ (Get_type.integer _position "0")
|
|
|
+ (Get_type.integer _position "1")
|
|
|
+ in
|
|
|
+ let expected = Get_type.(Raw Integer) in
|
|
|
+ let msg = "Adding integer" in
|
|
|
+ Alcotest.(check' type_of ~msg ~expected ~actual)
|
|
|
+
|
|
|
+let add_literal_number () =
|
|
|
+ let actual =
|
|
|
+ Get_type.boperator _position T.Plus
|
|
|
+ (Get_type.literal _position [ T.Text "2" ])
|
|
|
+ (Get_type.integer _position "1")
|
|
|
+ in
|
|
|
+ let expected = Get_type.(Raw Integer) in
|
|
|
+ let msg = "A string containing integer is considered as integer" in
|
|
|
+ Alcotest.(check' type_of ~msg ~expected ~actual)
|
|
|
+
|
|
|
+let concat_text () =
|
|
|
+ let actual =
|
|
|
+ Get_type.boperator _position T.Plus
|
|
|
+ (Get_type.literal _position [ T.Text "a" ])
|
|
|
+ (Get_type.integer _position "1")
|
|
|
+ in
|
|
|
+ let expected = Get_type.(Raw String) in
|
|
|
+ let msg = "Concatenate" in
|
|
|
+ Alcotest.(check' type_of ~msg ~expected ~actual)
|
|
|
+
|
|
|
+let test =
|
|
|
+ ( "Type expression",
|
|
|
+ [
|
|
|
+ Alcotest.test_case "int + int" `Quick add_number;
|
|
|
+ Alcotest.test_case "'int' + int" `Quick add_literal_number;
|
|
|
+ Alcotest.test_case "str + int" `Quick concat_text;
|
|
|
+ ] )
|