open Core_kernel let print_digest shape = Bin_prot.Shape.eval_to_digest_string shape |> Stdio.printf "%s\n%!" module _ = struct type t = int [@@deriving bin_io] let%expect_test _ = print_digest bin_shape_t; print_digest bin_shape_int; print_digest Int32.bin_shape_t; print_digest Int64.bin_shape_t; print_digest bin_shape_float; print_digest bin_shape_string; print_digest bin_shape_bool; print_digest bin_shape_char; [%expect {| 698cfa4093fe5e51523842d37b92aeac 698cfa4093fe5e51523842d37b92aeac 0892f5f3797659e9ecf8a0faa5f76829 0078f5c24ad346a7066cb6673cd5c3cb 1fd923acb2dd9c5d401ad5b08b1d40cd d9a8da25d5656b016fb4dbdc2e4197fb a25306e4c5d30d35adbb5b0462a6b1b3 84610d32d63dcff5c93f1033ec8cb1d5 |}] end module _ = struct type t = { t : int } [@@deriving bin_io] type u = { t : int ; u : float } [@@deriving bin_io] type v = { t : t ; u : u } [@@deriving bin_io] type w = { t : t ; u : u * u ; v : v * v * v } [@@deriving bin_io] let%expect_test _ = print_digest bin_shape_t; print_digest [%bin_shape: t * t]; print_digest [%bin_shape: int * t]; print_digest bin_shape_u; print_digest bin_shape_v; print_digest bin_shape_w; [%expect {| 43fa87a0bac7a0bb295f67cdc685aa26 d9aa33e00d47eb8eeb7f489b17d78d11 4455e4c2995a2db383c16d4e99093686 485a864ae3ab9d4e12534fd17f64a7c4 3a9e779c28768361e904e90f37728927 7a412f4ba96d992a85db1d498721b752 |}] end module _ = struct let print_shape_sexp shape = Stdio.printf "%s\n" (Bin_prot.Shape.eval shape |> Bin_prot.Shape.Canonical.sexp_of_t |> Sexp.to_string); print_digest shape type variant = Foo [@@deriving bin_io] type variant2 = | Foo | Bar of int | Bar2 of int * float | Baz of { x : int ; y : float } [@@deriving bin_io] type simple_rec = { foo : simple_rec option } [@@deriving bin_io] type int_list = | Empty | Cons of (int * int_list) [@@deriving bin_io] type int_list2 = | Empty | Cons of int * int_list2 [@@deriving bin_io] let%expect_test _ = print_shape_sexp [%bin_shape: int]; print_shape_sexp [%bin_shape: int list]; print_shape_sexp [%bin_shape: int array]; print_shape_sexp [%bin_shape: int option]; print_shape_sexp [%bin_shape: unit]; print_shape_sexp [%bin_shape: variant]; print_shape_sexp [%bin_shape: variant2]; print_shape_sexp [%bin_shape: [ `A ]]; print_shape_sexp [%bin_shape: [ `A of int ]]; print_shape_sexp [%bin_shape: [ `A of int | `B | `C of int * float | `D of string ]]; print_shape_sexp [%bin_shape: simple_rec]; print_shape_sexp [%bin_shape: int_list]; print_shape_sexp [%bin_shape: int_list2]; [%expect {| (Exp(Base int())) 698cfa4093fe5e51523842d37b92aeac (Exp(Base list((Exp(Base int()))))) 4cd553520709511864846bda25c448d0 (Exp(Base array((Exp(Base int()))))) 4c138035aa69ec9dd8b7a7119090f84a (Exp(Base option((Exp(Base int()))))) 33fd4ff7bde530bddf13dfa739207fae (Exp(Base unit())) 86ba5df747eec837f0b391dd49f33f9e (Exp(Variant((Foo())))) 81253431711eb0c9d669d0cf1c5ffea7 (Exp(Variant((Foo())(Bar((Exp(Base int()))))(Bar2((Exp(Base int()))(Exp(Base float()))))(Baz((Exp(Record((x(Exp(Base int())))(y(Exp(Base float()))))))))))) 6b5a9ecfe97b786f98c8b9e502c3d6db (Exp(Poly_variant((sorted((A())))))) 37dab657a1bd138599a678980804d513 (Exp(Poly_variant((sorted((A((Exp(Base int()))))))))) d82abba442a26f15f25d121e20b45083 (Exp(Poly_variant((sorted((A((Exp(Base int()))))(B())(C((Exp(Tuple((Exp(Base int()))(Exp(Base float())))))))(D((Exp(Base string()))))))))) 534bd89034090512512955f635735d46 (Exp(Application(Exp(Record((foo(Exp(Base option((Exp(Rec_app 0())))))))))())) 2e92d51efb901fcf492f243fc1c3601d (Exp(Application(Exp(Variant((Empty())(Cons((Exp(Tuple((Exp(Base int()))(Exp(Rec_app 0()))))))))))())) a0627068b62aa4530d1891cbe7f5d51e (Exp(Application(Exp(Variant((Empty())(Cons((Exp(Base int()))(Exp(Rec_app 0())))))))())) 2ac39052755cfe456342e727b104f34a |}] end