From f1942fd0d455e43ba596253e2f1a965fa87e546a Mon Sep 17 00:00:00 2001 From: Fabian Date: Sat, 16 Sep 2017 21:25:55 +0200 Subject: [PATCH 1/4] More tests for CCVector.append and CCVector.append_array --- src/core/CCVector.ml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index fcfd4c87..05f61ea7 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -165,6 +165,14 @@ let append a b = (*$T let v1 = init 5 (fun i->i) and v2 = init 5 (fun i->i+5) in \ append v1 v2; to_list v1 = CCList.(0--9) + let empty = create () and v2 = init 5 (fun i->i) in \ + append empty v2; to_list empty = CCList.(0--4) + let v1 = init 5 (fun i->i) and empty = create () in \ + append v1 empty; to_list v1 = CCList.(0--4) + let v = init 3 (fun i->i) in \ + append v v; to_list v = [0; 1; 2; 0; 1; 2] + let empty = create () in \ + append empty empty; to_list empty = [] *) (*$R @@ -204,6 +212,12 @@ let append_array a b = (*$T let v1 = init 5 (fun i->i) and v2 = Array.init 5 (fun i->i+5) in \ append_array v1 v2; to_list v1 = CCList.(0--9) + let empty = create () in \ + append_array empty CCArray.(0--5); to_list empty = CCList.(0--5) + let v1 = init 5 (fun i->i) in \ + append_array v1 [| |]; to_list v1 = CCList.(0--4) + let empty = create () in \ + append_array empty [| |]; to_list empty = [] *) let append_list a b = match b with From 9219d2435631b0970ee217cd9cddaec2ee325f0a Mon Sep 17 00:00:00 2001 From: Fabian Date: Sat, 16 Sep 2017 21:29:47 +0200 Subject: [PATCH 2/4] Fix CCVector.append_array (empty vector case) --- src/core/CCVector.ml | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index 05f61ea7..57f5548b 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -205,9 +205,15 @@ let append_seq a seq = let append_array a b = let len_b = Array.length b in - ensure a (a.size + len_b); - Array.blit b 0 a.vec a.size len_b; - a.size <- a.size + len_b + if _empty_array a then ( + a.vec <- Array.copy b; + a.size <- len_b; + ) + else ( + ensure a (a.size + len_b); + Array.blit b 0 a.vec a.size len_b; + a.size <- a.size + len_b + ) (*$T let v1 = init 5 (fun i->i) and v2 = Array.init 5 (fun i->i+5) in \ From 03f6a1fe5ee4fca81a6b4252fb81c787213ef541 Mon Sep 17 00:00:00 2001 From: Fabian Date: Sat, 16 Sep 2017 21:31:56 +0200 Subject: [PATCH 3/4] Use ensure_not_empty_ when vector is known to be non-empty --- src/core/CCVector.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/CCVector.ml b/src/core/CCVector.ml index 57f5548b..2d115673 100644 --- a/src/core/CCVector.ml +++ b/src/core/CCVector.ml @@ -156,7 +156,7 @@ let append a b = a.size <- b.size ) else ( - ensure a (a.size + b.size); + ensure_not_empty_ a (a.size + b.size); assert (Array.length a.vec >= a.size + b.size); Array.blit b.vec 0 a.vec a.size b.size; a.size <- a.size + b.size @@ -210,7 +210,7 @@ let append_array a b = a.size <- len_b; ) else ( - ensure a (a.size + len_b); + ensure_not_empty_ a (a.size + len_b); Array.blit b 0 a.vec a.size len_b; a.size <- a.size + len_b ) From ea54fdff32c3f099ee91962c2b21c2a2057454ba Mon Sep 17 00:00:00 2001 From: Fabian Date: Sat, 16 Sep 2017 21:34:36 +0200 Subject: [PATCH 4/4] Update authors --- AUTHORS.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS.adoc b/AUTHORS.adoc index 561fa633..b31a8f64 100644 --- a/AUTHORS.adoc +++ b/AUTHORS.adoc @@ -21,4 +21,5 @@ - Glenn Slotte (glennsl) - @LemonBoy - Leonid Rozenberg (@rleonid) -- Bikal Gurung (@bikalgurung) \ No newline at end of file +- Bikal Gurung (@bikalgurung) +- Fabian Hemmer (copy)