From ebe74bcb53feecf37d30c71257d472ef71707b09 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sun, 1 Oct 2017 04:45:19 +0200 Subject: [PATCH] UI-Coordinates: add further coverage for various boundary cases --- tests/library/path-array-test.cpp | 266 ++++++++++++++++++++++++++++-- 1 file changed, 255 insertions(+), 11 deletions(-) diff --git a/tests/library/path-array-test.cpp b/tests/library/path-array-test.cpp index 97375666d..8293719a3 100644 --- a/tests/library/path-array-test.cpp +++ b/tests/library/path-array-test.cpp @@ -28,19 +28,13 @@ #include "lib/test/run.hpp" #include "lib/test/test-helper.hpp" #include "lib/path-array.hpp" -//#include "lib/format-cout.hpp" #include "lib/format-util.hpp" -//#include "lib/idi/entry-id.hpp" -//#include "lib/diff/gen-node.hpp" #include "lib/util.hpp" #include using std::string; -//using lib::idi::EntryID; -//using lib::diff::GenNode; -//using util::isSameObject; using lib::Symbol; using util::isnil; using util::join; @@ -50,14 +44,9 @@ using util::join; namespace lib { namespace test { -// using lumiera::error::LUMIERA_ERROR_WRONG_TYPE; using lumiera::error::LUMIERA_ERROR_INDEX_BOUNDS; using lumiera::error::LUMIERA_ERROR_LOGIC; - namespace { //Test fixture... - - }//(End)Test fixture - using ParrT = lib::PathArray<5>; @@ -77,6 +66,7 @@ namespace test { { verify_basics(); verify_iteration(); + verify_boundaries(); verify_comparisons(); } @@ -171,6 +161,260 @@ namespace test { } + /** @test cover some tricky corner cases of + * the bound checks and normalisation routine. + * @remark the container used for this test has an + * inline chunk size of 5, which means any further + * elements are in heap allocated extension storage. + * Normalisation seamlessly surpasses that boundary. + */ + void + verify_boundaries() + { + ParrT parr; + CHECK ("" == join(parr)); + CHECK (0 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","Ψ","Φ","Ω"}; + CHECK ("ΓΔΘΞΣΨΦΩ" == join(parr,"")); + CHECK (8 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","Ψ","Φ",""}; + CHECK ("ΓΔΘΞΣΨΦ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","Ψ","Φ",nullptr}; + CHECK ("ΓΔΘΞΣΨΦ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","Ψ",nullptr,""}; + CHECK ("ΓΔΘΞΣΨ" == join(parr,"")); + CHECK (6 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","",nullptr,""}; + CHECK ("ΓΔΘΞΣ" == join(parr,"")); + CHECK (5 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ",nullptr,"",nullptr}; + CHECK ("ΓΔΘΞΣ" == join(parr,"")); + CHECK (5 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ",nullptr,nullptr,nullptr}; + CHECK ("ΓΔΘΞΣ" == join(parr,"")); + CHECK (5 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ",nullptr,nullptr,nullptr,""}; + CHECK ("ΓΔΘΞΣ" == join(parr,"")); + CHECK (5 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","Σ","","",""}; + CHECK ("ΓΔΘΞΣ" == join(parr,"")); + CHECK (5 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","","","Φ",""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ",nullptr,"","Φ",""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","",nullptr,"Φ",""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ",nullptr,nullptr,"Φ",""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","","","Φ",nullptr}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","","","Φ",nullptr,""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","","","Φ",nullptr,"",nullptr}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","","","Φ",nullptr,"",nullptr,""}; + CHECK ("ΓΔΘΞ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ","",nullptr,"",nullptr,"",nullptr,""}; + CHECK ("ΓΔΘΞ" == join(parr,"")); + CHECK (4 == parr.size()); + + parr = ParrT{"Γ","Δ","Θ","Ξ",nullptr,"",nullptr,"",nullptr,"",nullptr}; + CHECK ("ΓΔΘΞ" == join(parr,"")); + CHECK (4 == parr.size()); + + parr = ParrT{"","Δ","Θ","Ξ","","",""}; + CHECK ("ΔΘΞ" == join(parr,"")); + CHECK (4 == parr.size()); + CHECK ("" == parr[0]); + + parr = ParrT{nullptr,"Δ","Θ","Ξ","","",""}; + CHECK ("ΔΘΞ" == join(parr,"")); + CHECK (4 == parr.size()); + CHECK ("" == parr[0]); + + parr = ParrT{nullptr,"Δ",nullptr,"Ξ","","",""}; + CHECK ("Δ*Ξ" == join(parr,"")); + CHECK (4 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("Δ" == parr[1]); + CHECK ("*" == parr[2]); + CHECK ("Ξ" == parr[3]); + + parr = ParrT{nullptr,"",nullptr,"Ξ","","",""}; + CHECK ("Ξ" == join(parr,"")); + CHECK (4 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + + parr = ParrT{nullptr,"",nullptr,"Ξ","","Ψ",""}; + CHECK ("Ξ*Ψ" == join(parr,"")); + CHECK (6 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("Ψ" == parr[5]); + + parr = ParrT{nullptr,"",nullptr,"Ξ",nullptr,"Ψ",""}; + CHECK ("Ξ*Ψ" == join(parr,"")); + CHECK (6 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("Ψ" == parr[5]); + + parr = ParrT{nullptr,"",nullptr,"Ξ",nullptr,nullptr,"Φ",""}; + CHECK ("Ξ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{nullptr,"",nullptr,"Ξ","",nullptr,"Φ",""}; + CHECK ("Ξ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{nullptr,"",nullptr,"Ξ",nullptr,"","Φ",""}; + CHECK ("Ξ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{nullptr,"",nullptr,"Ξ","","","Φ",""}; + CHECK ("Ξ**Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("Ξ" == parr[3]); + CHECK ("*" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{"",nullptr,"",nullptr,"Σ","","Φ",""}; + CHECK ("Σ*Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("Σ" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{"",nullptr,"",nullptr,"Σ",nullptr,"Φ",""}; + CHECK ("Σ*Φ" == join(parr,"")); + CHECK (7 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("Σ" == parr[4]); + CHECK ("*" == parr[5]); + CHECK ("Φ" == parr[6]); + + parr = ParrT{"",nullptr,"",nullptr,"","Ψ",nullptr,"Ω",""}; + CHECK ("Ψ*Ω" == join(parr,"")); + CHECK (8 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("" == parr[4]); + CHECK ("Ψ" == parr[5]); + CHECK ("*" == parr[6]); + CHECK ("Ω" == parr[7]); + + parr = ParrT{nullptr,"",nullptr,"",nullptr,"Ψ",nullptr,"Ω",""}; + CHECK ("Ψ*Ω" == join(parr,"")); + CHECK (8 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("" == parr[4]); + CHECK ("Ψ" == parr[5]); + CHECK ("*" == parr[6]); + CHECK ("Ω" == parr[7]); + + parr = ParrT{nullptr,"",nullptr,"",nullptr,"","Φ",nullptr,"ω",""}; + CHECK ("Φ*ω" == join(parr,"")); + CHECK (9 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("" == parr[4]); + CHECK ("" == parr[5]); + CHECK ("Φ" == parr[6]); + CHECK ("*" == parr[7]); + CHECK ("ω" == parr[8]); + + parr = ParrT{"",nullptr,"",nullptr,"",nullptr,"Φ",nullptr,"ω",""}; + CHECK ("Φ*ω" == join(parr,"")); + CHECK (9 == parr.size()); + CHECK ("" == parr[0]); + CHECK ("" == parr[1]); + CHECK ("" == parr[2]); + CHECK ("" == parr[3]); + CHECK ("" == parr[4]); + CHECK ("" == parr[5]); + CHECK ("Φ" == parr[6]); + CHECK ("*" == parr[7]); + CHECK ("ω" == parr[8]); + } + + void verify_comparisons() {