summaryrefslogtreecommitdiff
path: root/ocaml/test/check_slot2_opcode.ml
blob: faca7e00f573dae5d6d5325eb6452e9f2558a1a9 (plain)
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
(* Check what opcode is in slot 2 (the formula after opcode 2) *)

open Nock_lib

let () =
  Eio_main.run (fun env ->
    let fs = Eio.Stdenv.fs env in
    let pill_bytes = Eio.Path.(load (fs / "ivory.pill")) |> Bytes.of_string in
    let pill = Serial.cue pill_bytes in
    let core = Noun.tail pill in

    (* Get slot 2 (this becomes the formula after opcode 2) *)
    let formula = Noun.slot (Z.of_int 2) core in
    Printf.printf "Slot 2 (becomes formula) mug: 0x%08lx\n" (Noun.mug formula);
    Printf.printf "Slot 2 is: %s\n" (if Noun.is_cell formula then "cell" else "atom");

    if Noun.is_cell formula then begin
      let h = Noun.head formula in
      Printf.printf "Slot 2 head is: %s\n" (if Noun.is_cell h then "cell" else "atom");
      match h with
      | Noun.Atom { z; _ } when Z.fits_int z ->
          Printf.printf "Slot 2 starts with opcode: %d\n" (Z.to_int z)
      | Noun.Cell _ ->
          Printf.printf "Slot 2 starts with CELL (distribution)\n"
      | _ ->
          Printf.printf "Slot 2 head is large atom\n"
    end
  )