diff --git a/src/data/CCBV.ml b/src/data/CCBV.ml index 59134951..d6b30265 100644 --- a/src/data/CCBV.ml +++ b/src/data/CCBV.ml @@ -228,6 +228,18 @@ let clear bv = assert_bool "must be empty" (CCBV.is_empty bv); *) +let equal x y : bool = + x.size = y.size && + x.a = y.a + +(*$T + equal (of_list [1; 3; 4]) (of_list [1; 3; 4]) + equal (empty()) (empty()) + not (equal (empty ()) (of_list [1])) + not (equal (empty ()) (of_list [2; 5])) + not (equal (of_list [1;3]) (of_list [2; 3])) +*) + let iter bv f = let len = array_length_of_size bv.size in assert (len <= Array.length bv.a); diff --git a/src/data/CCBV.mli b/src/data/CCBV.mli index 140b8b1c..b115aaaa 100644 --- a/src/data/CCBV.mli +++ b/src/data/CCBV.mli @@ -135,6 +135,10 @@ val select : t -> 'a array -> 'a list val selecti : t -> 'a array -> ('a * int) list (** Same as {!select}, but selected elements are paired with their indexes. *) +val equal : t -> t -> bool +(** Bitwise comparison, including the size ([equal a b] implies [length a=length b]). + @since NEXT_RELEASE *) + type 'a iter = ('a -> unit) -> unit val to_iter : t -> int iter