91 lines
2.4 KiB
OCaml
91 lines
2.4 KiB
OCaml
(* TEST
|
|
flags = "-nostdlib -nopervasives -dlambda"
|
|
* expect
|
|
*)
|
|
|
|
(******************************************************************************)
|
|
|
|
(* Check that the extra split indeed happens when the last row is made of
|
|
"variables" only *)
|
|
|
|
let last_is_anys = function
|
|
| true, false -> 1
|
|
| _, false -> 2
|
|
| _, _ -> 3
|
|
;;
|
|
[%%expect{|
|
|
(let
|
|
(last_is_anys/10 =
|
|
(function param/12 : int
|
|
(catch
|
|
(if (field 0 param/12) (if (field 1 param/12) (exit 1) 1)
|
|
(if (field 1 param/12) (exit 1) 2))
|
|
with (1) 3)))
|
|
(apply (field 1 (global Toploop!)) "last_is_anys" last_is_anys/10))
|
|
val last_is_anys : bool * bool -> int = <fun>
|
|
|}]
|
|
|
|
let last_is_vars = function
|
|
| true, false -> 1
|
|
| _, false -> 2
|
|
| _x, _y -> 3
|
|
;;
|
|
[%%expect{|
|
|
(let
|
|
(last_is_vars/17 =
|
|
(function param/21 : int
|
|
(catch
|
|
(if (field 0 param/21) (if (field 1 param/21) (exit 3) 1)
|
|
(if (field 1 param/21) (exit 3) 2))
|
|
with (3) 3)))
|
|
(apply (field 1 (global Toploop!)) "last_is_vars" last_is_vars/17))
|
|
val last_is_vars : bool * bool -> int = <fun>
|
|
|}]
|
|
|
|
(******************************************************************************)
|
|
|
|
(* Check that the [| _, false, true -> 12] gets raised. *)
|
|
|
|
type t = ..
|
|
type t += A | B of unit | C of bool * int;;
|
|
[%%expect{|
|
|
0
|
|
type t = ..
|
|
(let
|
|
(A/25 = (makeblock 248 "A" (caml_fresh_oo_id 0))
|
|
B/26 = (makeblock 248 "B" (caml_fresh_oo_id 0))
|
|
C/27 = (makeblock 248 "C" (caml_fresh_oo_id 0)))
|
|
(seq (apply (field 1 (global Toploop!)) "A/25" A/25)
|
|
(apply (field 1 (global Toploop!)) "B/26" B/26)
|
|
(apply (field 1 (global Toploop!)) "C/27" C/27)))
|
|
type t += A | B of unit | C of bool * int
|
|
|}]
|
|
|
|
let f = function
|
|
| A, true, _ -> 1
|
|
| _, false, false -> 11
|
|
| B _, true, _ -> 2
|
|
| C _, true, _ -> 3
|
|
| _, false, true -> 12
|
|
| _ -> 4
|
|
;;
|
|
[%%expect{|
|
|
(let
|
|
(C/27 = (apply (field 0 (global Toploop!)) "C/27")
|
|
B/26 = (apply (field 0 (global Toploop!)) "B/26")
|
|
A/25 = (apply (field 0 (global Toploop!)) "A/25")
|
|
f/28 =
|
|
(function param/30 : int
|
|
(let (*match*/31 =a (field 0 param/30))
|
|
(catch
|
|
(if (== *match*/31 A/25) (if (field 1 param/30) 1 (exit 8))
|
|
(exit 8))
|
|
with (8)
|
|
(if (field 1 param/30)
|
|
(if (== (field 0 *match*/31) B/26) 2
|
|
(if (== (field 0 *match*/31) C/27) 3 4))
|
|
(if (field 2 param/30) 12 11))))))
|
|
(apply (field 1 (global Toploop!)) "f" f/28))
|
|
val f : t * bool * bool -> int = <fun>
|
|
|}]
|