package octez-internal-libs
A package that contains some libraries used by the Octez suite
Install
Dune Dependency
Authors
Maintainers
Sources
tezos-octez-v20.1.tag.bz2
sha256=ddfb5076eeb0b32ac21c1eed44e8fc86a6743ef18ab23fff02d36e365bb73d61
sha512=d22a827df5146e0aa274df48bc2150b098177ff7e5eab52c6109e867eb0a1f0ec63e6bfbb0e3645a6c2112de3877c91a17df32ccbff301891ce4ba630c997a65
doc/src/octez-internal-libs.irmin_test_helpers/store_graph.ml.html
Source file store_graph.ml
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
(* * Copyright (c) 2013-2022 Thomas Gazagnaire <thomas@gazagnaire.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *) open! Import open Common module Make (S : Generic_key) = struct include Common.Make_helpers (S) let test_iter x () = let test repo = let pp_id = Irmin.Type.pp S.Tree.kinded_key_t in let eq_id = Irmin.Type.(unstage (equal S.Tree.kinded_key_t)) in let mem k ls = List.exists (fun k' -> eq_id k k') ls in let visited = ref [] in let skipped = ref [] in let rev_order oldest k = if !visited = [] && not (eq_id k oldest) then Alcotest.fail "traversal should start with oldest node" in let in_order oldest k = if !visited = [] && eq_id k oldest then Alcotest.fail "traversal shouldn't start with oldest node" in let node k = if mem (`Node k) !visited then Alcotest.failf "node %a visited twice" (Irmin.Type.pp B.Node.Key.t) k; visited := `Node k :: !visited; Lwt.return_unit in let contents ?order k = let e = `Contents (k, S.Metadata.default) in if mem e !visited then Alcotest.failf "contents %a visited twice" (Irmin.Type.pp B.Contents.Key.t) k; (match order with None -> () | Some f -> f e); visited := e :: !visited; Lwt.return_unit in let test_rev_order ~nodes ~max = let oldest = List.hd nodes in let contents = contents ~order:(rev_order oldest) in let+ () = Graph.iter (g repo) ~min:[] ~max ~node ~contents ~rev:true () in List.iter (fun k -> if not (mem k !visited) then Alcotest.failf "%a should be visited" (Irmin.Type.pp S.Tree.kinded_key_t) k) nodes in let test_in_order ~nodes ~max = let oldest = List.hd nodes in let contents = contents ~order:(in_order oldest) in let+ () = Graph.iter (g repo) ~min:[] ~max ~node ~contents ~rev:false () in List.iter (fun k -> if not (mem k !visited) then Alcotest.failf "%a should be visited" pp_id k) nodes in let test_skip ~max ~to_skip ~not_visited = let skip_node k = if mem (`Node k) to_skip then ( skipped := `Node k :: !skipped; Lwt.return_true) else Lwt.return_false in let+ () = Graph.iter (g repo) ~min:[] ~max ~node ~contents ~skip_node ~rev:false () in List.iter (fun k -> if mem k !visited || not (mem k !skipped) then Alcotest.failf "%a should be skipped" pp_id k) to_skip; List.iter (fun k -> if mem k !visited || mem k !skipped then Alcotest.failf "%a should not be skipped nor visited" pp_id k) not_visited in let test_min_max ~nodes ~min ~max ~not_visited = Graph.iter (g repo) ~min ~max ~node ~contents ~rev:false () >|= fun () -> List.iter (fun k -> if mem k not_visited && mem k !visited then Alcotest.failf "%a should not be visited" pp_id k; if (not (mem k not_visited)) && not (mem k !visited) then Alcotest.failf "%a should not be visited" pp_id k) nodes in let test1 () = let* foo = with_contents repo (fun c -> B.Contents.add c "foo") in let foo_k = (foo, S.Metadata.default) in let* k1 = with_node repo (fun g -> Graph.v g [ ("b", normal foo) ]) in let* k2 = with_node repo (fun g -> Graph.v g [ ("a", `Node k1) ]) in let* k3 = with_node repo (fun g -> Graph.v g [ ("c", `Node k1) ]) in let nodes = [ `Contents foo_k; `Node k1; `Node k2; `Node k3 ] in visited := []; test_rev_order ~nodes ~max:[ k2; k3 ] >>= fun () -> visited := []; test_in_order ~nodes ~max:[ k2; k3 ] >>= fun () -> visited := []; skipped := []; test_skip ~max:[ k2; k3 ] ~to_skip:[ `Node k1 ] ~not_visited:[] >>= fun () -> visited := []; let* () = test_min_max ~nodes ~min:[ k1 ] ~max:[ k2 ] ~not_visited:[ `Contents foo_k; `Node k3 ] in visited := []; test_min_max ~nodes ~min:[ k2; k3 ] ~max:[ k2; k3 ] ~not_visited:[ `Contents foo_k; `Node k1 ] in let test2 () = (* Graph.iter requires a node as max, we cannot test a graph with only contents. *) let* foo = with_contents repo (fun c -> B.Contents.add c "foo") in let foo_k = (foo, S.Metadata.default) in let* k1 = with_node repo (fun g -> Graph.v g [ ("b", normal foo) ]) in visited := []; test_rev_order ~nodes:[ `Contents foo_k; `Node k1 ] ~max:[ k1 ] >>= fun () -> visited := []; skipped := []; test_skip ~max:[ k1 ] ~to_skip:[ `Node k1 ] ~not_visited:[ `Contents foo_k ] in let test3 () = let* foo = with_contents repo (fun c -> B.Contents.add c "foo") in let foo_k = (foo, S.Metadata.default) in let* kb1 = with_node repo (fun g -> Graph.v g [ ("b1", normal foo) ]) in let* ka1 = with_node repo (fun g -> Graph.v g [ ("a1", `Node kb1) ]) in let* ka2 = with_node repo (fun g -> Graph.v g [ ("a2", `Node kb1) ]) in let* kb2 = with_node repo (fun g -> Graph.v g [ ("b2", normal foo) ]) in let* kc = with_node repo (fun g -> Graph.v g [ ("c1", `Node ka1); ("c2", `Node ka2); ("c3", `Node kb2) ]) in let nodes = [ `Contents foo_k; `Node kb1; `Node ka1; `Node ka2; `Node kb2; `Node kc; ] in visited := []; test_rev_order ~nodes ~max:[ kc ] >>= fun () -> visited := []; test_in_order ~nodes ~max:[ kc ] >>= fun () -> visited := []; skipped := []; let* () = test_skip ~max:[ kc ] ~to_skip:[ `Node ka1; `Node ka2 ] ~not_visited:[ `Node kb1 ] in visited := []; skipped := []; let* () = test_skip ~max:[ kc ] ~to_skip:[ `Node ka1; `Node ka2; `Node kb2 ] ~not_visited:[ `Node kb1; `Contents foo_k ] in visited := []; let* () = test_min_max ~nodes ~min:[ kb1 ] ~max:[ ka1 ] ~not_visited:[ `Contents foo_k; `Node ka2; `Node kb2; `Node kc ] in visited := []; test_min_max ~nodes ~min:[ kc ] ~max:[ kc ] ~not_visited: [ `Contents foo_k; `Node kb1; `Node ka1; `Node ka2; `Node kb2 ] in test1 () >>= fun () -> test2 () >>= fun () -> test3 () >>= fun () -> B.Repo.close repo in run x test let tests = [ ("Iter", test_iter) ] end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>