From 14b1ba2adc90cc6f1fe3bda97e08d57e79debf50 Mon Sep 17 00:00:00 2001 From: Vincent Botbol Date: Fri, 26 Oct 2018 03:08:09 +0200 Subject: [PATCH] Stdlib/Ring: fix ring's semantics --- src/lib_p2p/test/test_p2p_peerset.ml | 4 +++- src/lib_stdlib/ring.ml | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/lib_p2p/test/test_p2p_peerset.ml b/src/lib_p2p/test/test_p2p_peerset.ml index 9435807d4..9fce3940d 100644 --- a/src/lib_p2p/test/test_p2p_peerset.ml +++ b/src/lib_p2p/test/test_p2p_peerset.ml @@ -60,7 +60,9 @@ let test_overflow _ = assert_equal_bool ~msg:__LOC__ true (P2p_acl.PeerRing.mem set (a "baz")); P2p_acl.PeerRing.add set (a "zor"); assert_equal_bool ~msg:__LOC__ true (P2p_acl.PeerRing.mem set (a "zor")); - assert_equal_bool ~msg:__LOC__ false (P2p_acl.PeerRing.mem set (a "baz")) + assert_equal_bool ~msg:__LOC__ false (P2p_acl.PeerRing.mem set (a "foo")); + assert_equal_bool ~msg:__LOC__ true (P2p_acl.PeerRing.mem set (a "bar")); + assert_equal_bool ~msg:__LOC__ true (P2p_acl.PeerRing.mem set (a "baz")) let () = Alcotest.run ~argv:[|""|] "tezos-p2p" [ diff --git a/src/lib_stdlib/ring.ml b/src/lib_stdlib/ring.ml index 6be1f0e89..027b5c012 100644 --- a/src/lib_stdlib/ring.ml +++ b/src/lib_stdlib/ring.ml @@ -33,7 +33,11 @@ module Ring = struct type 'a t = 'a raw ref - let create size = ref (Empty size) + let create size = + if size <= 0 then + invalid_arg "Ring.create: size must be positive" + else + ref (Empty size) let add r v = match !r with @@ -52,7 +56,7 @@ module Ring = struct | Empty _ -> None | Inited s -> if s.pos >= Array.length s.data - 1 then - Some (s.data.(s.pos mod Array.length s.data)) + Some (s.data.((s.pos + 1) mod Array.length s.data)) else None in add r v ; replaced