File: test_deriving_enum.ml

package info (click to toggle)
ppx-deriving 6.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 532 kB
  • sloc: ml: 3,983; makefile: 26; sh: 15
file content (42 lines) | stat: -rw-r--r-- 1,829 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
open OUnit2

let get o = match o with Some v -> v | None -> assert false

type va = Aa | Ba | Ca [@@deriving enum, show]
let test_auto ctxt =
  assert_equal ~printer:string_of_int 0  (va_to_enum Aa);
  assert_equal ~printer:string_of_int 1  (va_to_enum Ba);
  assert_equal ~printer:string_of_int 2  (va_to_enum Ca);
  assert_equal ~printer:show_va       Aa (get (va_of_enum 0));
  assert_equal ~printer:show_va       Ba (get (va_of_enum 1));
  assert_equal ~printer:show_va       Ca (get (va_of_enum 2));
  assert_equal ~printer:string_of_int 0 min_va;
  assert_equal ~printer:string_of_int 2 max_va

type vm = Am [@value 1] | Bm [@value 3] | Cm [@@deriving enum, show]
let test_manual ctxt =
  assert_equal ~printer:string_of_int 1  (vm_to_enum Am);
  assert_equal ~printer:string_of_int 3  (vm_to_enum Bm);
  assert_equal ~printer:string_of_int 4  (vm_to_enum Cm);
  assert_equal ~printer:show_vm       Am (get (vm_of_enum 1));
  assert_equal ~printer:show_vm       Bm (get (vm_of_enum 3));
  assert_equal ~printer:show_vm       Cm (get (vm_of_enum 4));
  assert_equal ~printer:string_of_int 1 min_vm;
  assert_equal ~printer:string_of_int 4 max_vm

type pv = [ `A | `B | `C ] [@@deriving enum, show]
let test_poly ctxt =
  assert_equal ~printer:string_of_int 0  (pv_to_enum `A);
  assert_equal ~printer:string_of_int 1  (pv_to_enum `B);
  assert_equal ~printer:string_of_int 2  (pv_to_enum `C);
  assert_equal ~printer:show_pv       `A (get (pv_of_enum 0));
  assert_equal ~printer:show_pv       `B (get (pv_of_enum 1));
  assert_equal ~printer:show_pv       `C (get (pv_of_enum 2));
  assert_equal ~printer:string_of_int 0 min_pv;
  assert_equal ~printer:string_of_int 2 max_pv

let suite = "Test deriving(enum)" >::: [
    "test_auto"   >:: test_auto;
    "test_manual" >:: test_manual;
    "test_poly"   >:: test_poly;
  ]