include <primitives.scad>;
use <table.scad>;
use <console.scad>;
use <validation.scad>;
show_passing = true;
show_skipped = true;
echo( str("OpenSCAD Version ", version()) );
test_c =
[
["id", "identifier"],
["td", "description"],
["tv", "test value"]
];
test_r =
[
["t01", "The undefined value", undef],
[
"t02",
"The empty vector",
empty_v],
["t03", "A range", [0:0.5:9]],
["t04", "A string", "A string"],
["t05", "Test vector 01", ["orange","apple","grape","banana"]],
["t06", "Test vector 02", ["b","a","n","a","n","a","s"]],
["t07", "Test vector 03", [undef]],
["t08", "Test vector 04", [[1,2],[2,3]]],
["t09", "Test vector 05", ["ab",[1,2],[2,3],[4,5]]],
["t10", "Test vector 06", [[1,2,3],[4,5,6],[7,8,9],["a","b","c"]]],
["t11", "Vector of integers 0 to 15", [for (i=[0:15]) i]]
];
good_c =
pmerge([concat(
"id", test_ids), concat(
"identifier", test_ids)]);
skip = -1;
good_r =
[
["consts",
empty_v
],
["vstr",
undef,
"[0 : 0.5 : 9]",
"A string",
"orangeapplegrapebanana",
"bananas",
"undef",
"[1, 2][2, 3]",
"ab[1, 2][2, 3][4, 5]",
"[1, 2, 3][4, 5, 6][7, 8, 9][\"a\", \"b\", \"c\"]",
"0123456789101112131415"
],
["sum",
undef,
0,
85.5,
undef,
undef,
undef,
undef,
[3,5],
undef,
[undef,undef,undef],
120
],
["find_12",
[0],
[1],
empty_v
],
["count_S1",
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1
],
["exists_S1",
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true
],
["defined_or_D",
"default",
[0:0.5:9],
"A string",
["orange","apple","grape","banana"],
["b","a","n","a","n","a","s"],
[undef],
[[1,2],[2,3]],
["ab",[1,2],[2,3],[4,5]],
[[1,2,3],[4,5,6],[7,8,9],["a","b","c"]],
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
],
["edefined_or_DE3",
"default",
"default",
"default",
"t",
"banana",
"a",
"default",
"default",
[4,5],
["a","b","c"],
3
],
["first",
undef,
undef,
undef,
"A",
"orange",
"b",
undef,
[1,2],
"ab",
[1,2,3],
0
],
["second",
undef,
undef,
undef,
" ",
"apple",
"a",
undef,
[2,3],
[1,2],
[4,5,6],
1
],
["last",
undef,
undef,
undef,
"g",
"banana",
"s",
undef,
[2,3],
[4,5],
["a","b","c"],
15
],
["nfirst_1",
undef,
undef,
undef,
["A"],
["orange"],
["b"],
[undef],
[[1,2]],
["ab"],
[[1,2,3]],
[0]
],
["nlast_1",
undef,
undef,
undef,
["g"],
["banana"],
["s"],
[undef],
[[2,3]],
[[4,5]],
[["a","b","c"]],
[15]
],
["nhead_1",
undef,
undef,
undef,
["A"," ","s","t","r","i","n"],
["orange","apple","grape"],
["b","a","n","a","n","a"],
[[1,2]],
["ab",[1,2],[2,3]],
[[1,2,3],[4,5,6],[7,8,9]],
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
],
["ntail_1",
undef,
undef,
undef,
[" ","s","t","r","i","n","g"],
["apple","grape","banana"],
["a","n","a","n","a","s"],
[[2,3]],
[[1,2],[2,3],[4,5]],
[[4,5,6],[7,8,9],["a","b","c"]],
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
],
["rselect_02",
undef,
undef,
["A"," ","s"],
["orange","apple","grape"],
["b","a","n"],
undef,
undef,
["ab",[1,2],[2,3]],
[[1,2,3],[4,5,6],[7,8,9]],
[0,1,2]
],
["eselect_F",
undef,
undef,
["A"," ","s","t","r","i","n","g"],
["o","a","g","b"],
["b","a","n","a","n","a","s"],
[undef],
[1,2],
["a",1,2,4],
[1,4,7,"a"],
skip
],
["eselect_L",
undef,
undef,
["A"," ","s","t","r","i","n","g"],
["e","e","e","a"],
["b","a","n","a","n","a","s"],
[undef],
[2,3],
["b",2,3,5],
[3,6,9,"c"],
skip
],
["eselect_1",
undef,
undef,
skip,
["r","p","r","a"],
skip,
[undef],
[2,3],
["b",2,3,5],
[2,5,8,"b"],
skip
],
["smerge",
undef,
[[0:0.5:9]],
["A string"],
["orange","apple","grape","banana"],
["b","a","n","a","n","a","s"],
[undef],
[1,2,2,3],
["ab",1,2,2,3,4,5],
[1,2,3,4,5,6,7,8,9,"a","b","c"],
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
],
["pmerge",
undef,
undef,
["A string"],
[
["o","a","g","b"],["r","p","r","a"],
["a","p","a","n"],["n","l","p","a"],
["g","e","e","n"]
],
[["b","a","n","a","n","a","s"]],
undef,
[[1,2],[2,3]],
[["a",1,2,4],["b",2,3,5]],
[[1,4,7,"a"],[2,5,8,"b"],[3,6,9,"c"]],
undef
],
["reverse",
undef,
undef,
["g","n","i","r","t","s"," ","A"],
["banana","grape","apple","orange"],
["s","a","n","a","n","a","b"],
[undef],
[[2,3],[1,2]],
[[4,5],[2,3],[1,2],"ab"],
[["a","b","c"],[7,8,9],[4,5,6],[1,2,3]],
[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]
],
["qsort",
undef,
undef,
undef,
["apple","banana","grape","orange"],
["a","a","a","b","n","n","s"],
undef,
undef,
undef,
undef,
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
],
["qsort2_HR",
undef,
undef,
undef,
["orange","grape","banana","apple"],
["s","n","n","b","a","a","a"],
[undef],
[[3,2],[2,1]],
[[5,4],[3,2],[2,1],"ab"],
[["c","b","a"],[9,8,7],[6,5,4],[3,2,1]],
[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]
],
["strip",
undef,
undef,
["A"," ","s","t","r","i","n","g"],
["orange","apple","grape","banana"],
["b","a","n","a","n","a","s"],
[undef],
[[1,2],[2,3]],
["ab",[1,2],[2,3],[4,5]],
[[1,2,3],[4,5,6],[7,8,9],["a","b","c"]],
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
],
["eappend_T0",
undef,
[[0]],
undef,
[
["A",0],[" ",0],["s",0],["t",0],
["r",0],["i",0],["n",0],["g",0]
],
[
["orange",0],["apple",0],
["grape",0],["banana",0]
],
[
["b",0],["a",0],["n",0],["a",0],
["n",0],["a",0],["s",0]
],
[[undef,0]],
[[1,2,0],[2,3,0]],
[["ab",0],[1,2,0],[2,3,0],[4,5,0]],
[[1,2,3,0],[4,5,6,0],[7,8,9,0],["a","b","c",0]],
[
[0,0],[1,0],[2,0],[3,0],[4,0],[5,0],
[6,0],[7,0],[8,0],[9,0],[10,0],[11,0],
[12,0],[13,0],[14,0],[15,0]
]
],
["insert_T0",
undef,
undef,
undef,
undef,
["orange",0,"apple","grape","banana"],
["b","a","n","a","n","a",0,"s"],
undef,
[[1,2],0,[2,3]],
["ab",[1,2],0,[2,3],[4,5]],
undef,
[0,1,2,3,4,0,5,6,7,8,9,10,11,12,13,14,15]
],
["delete_T0",
undef,
undef,
["A"," ","s","t","r","i","n","g"],
["orange","grape","banana"],
["b","a","n","a","n","a"],
[undef],
[[1,2]],
["ab",[1,2],[4,5]],
[[1,2,3],[4,5,6],[7,8,9],["a","b","c"]],
[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15]
],
["unique",
undef,
undef,
["A"," ","s","t","r","i","n","g"],
["orange","apple","grape","banana"],
["b","a","n","s"],
[undef],
[[1,2],[2,3]],
["ab",[1,2],[2,3],[4,5]],
[[1,2,3],[4,5,6],[7,8,9],["a","b","c"]],
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
]
];
function get_value( vid ) =
table_get(test_r, test_c, vid,
"tv");
module run_test( fname, fresult, vid )
{
value_text =
table_get(test_r, test_c, vid,
"td");
pass_value =
table_get(good_r, good_c, fname, vid);
test_pass =
validate( cv=fresult, t=
"equals", ev=pass_value, pf=
true );
test_text =
validate( str(fname,
"(", get_value(vid),
")=", pass_value), fresult,
"equals", pass_value );
if ( pass_value != skip )
{
if ( !test_pass )
log_warn( str(vid,
"(", value_text,
") ", test_text) );
else if ( show_passing )
}
else if ( show_skipped )
log_info( str(vid,
" *skip*: '", fname,
"(", value_text,
")'") );
}
for (vid=test_ids) run_test(
"consts",
consts(get_value(vid)), vid );
for (vid=test_ids) run_test(
"vstr",
vstr(get_value(vid)), vid );
for (vid=test_ids) run_test(
"sum",
sum(get_value(vid)), vid );
for (vid=test_ids) run_test(
"find_12",
find([1,2],get_value(vid)), vid );
for (vid=test_ids) run_test(
"count_S1",
count(1,get_value(vid),
true), vid );
for (vid=test_ids) run_test(
"exists_S1",
exists(1,get_value(vid),
true), vid );
for (vid=test_ids) run_test(
"defined_or_D",
defined_or(get_value(vid),
"default"), vid );
for (vid=test_ids) run_test(
"edefined_or_DE3",
edefined_or(get_value(vid),3,
"default"), vid );
for (vid=test_ids) run_test(
"first",
first(get_value(vid)), vid );
for (vid=test_ids) run_test(
"second",
second(get_value(vid)), vid );
for (vid=test_ids) run_test(
"last",
last(get_value(vid)), vid );
for (vid=test_ids) run_test(
"nfirst_1",
nfirst(get_value(vid),n=1), vid );
for (vid=test_ids) run_test(
"nlast_1",
nlast(get_value(vid),n=1), vid );
for (vid=test_ids) run_test(
"nhead_1",
nhead(get_value(vid),n=1), vid );
for (vid=test_ids) run_test(
"ntail_1",
ntail(get_value(vid),n=1), vid );
for (vid=test_ids) run_test(
"rselect_02",
rselect(get_value(vid),i=[0:2]), vid );
for (vid=test_ids) run_test(
"eselect_F",
eselect(get_value(vid),f=
true), vid );
for (vid=test_ids) run_test(
"eselect_L",
eselect(get_value(vid),l=
true), vid );
for (vid=test_ids) run_test(
"eselect_1",
eselect(get_value(vid),i=1), vid );
for (vid=test_ids) run_test(
"smerge",
smerge(get_value(vid)), vid );
for (vid=test_ids) run_test(
"pmerge",
pmerge(get_value(vid)), vid );
for (vid=test_ids) run_test(
"reverse",
reverse(get_value(vid)), vid );
for (vid=test_ids) run_test(
"qsort",
qsort(get_value(vid)), vid );
for (vid=test_ids) run_test(
"qsort2_HR",
qsort2(get_value(vid), d=5, r=
true), vid );
for (vid=test_ids) run_test(
"strip",
strip(get_value(vid)), vid );
for (vid=test_ids) run_test(
"eappend_T0",
eappend(0,get_value(vid)), vid );
for (vid=test_ids) run_test(
"insert_T0",
insert(0,get_value(vid),mv=[
"x",
"r",
"apple",
"s",[2,3],5]), vid );
for (vid=test_ids) run_test( "delete_T0", delete(get_value(vid),mv=["x","r","apple","s",[2,3],5]), vid );
for (vid=test_ids) run_test(
"unique",
unique(get_value(vid)), vid );