include <console.scad>;
include <datatypes/datatypes_table.scad>;
include <math/math_vector_algebra.scad>;
include <validation.scad>;
show_passing = true;
show_skipped = true;
echo( str("OpenSCAD Version ", version()) );
test_c =
[
["id", "identifier"],
["td", "description"],
["tv", "test value"]
];
test_r =
[
["fac", "Function argument count", undef],
["crp", "Result precision", undef],
["t01", "All undefined", [undef,undef,undef,undef,undef,undef]],
["t03", "All scalars", [60, 50, 40, 30, 20, 10]],
["t04", "All 1d vectors", [[99], [58], [12], [42], [15], [1]]],
["t05", "All 2d vectors", [
[99,2], [58,16], [12,43],
[42,13], [15,59], [1,85]
]],
["t06", "All 3d vectors", [
[199,20,55], [158,116,75], [12,43,90],
[42,13,34], [15,59,45], [62,33,69]
]],
["t07", "All 4d vectors", [
[169,27,35,10], [178,016,25,20], [12,43,90,30],
[42,13,34,60], [15,059,45,50], [62,33,69,40]
]],
["t08", "Orthogonal vectors", [
]],
["t09", "Coplanar vectors", [
]]
];
good_c =
pmerge([concat(
"id", test_ids), concat(
"identifier", test_ids)]);
skip = -1;
good_r =
[
["distance_pp",
2,
4,
undef,
undef,
10,
41,
43.3244,
106.2873,
20.0499,
1.4142,
1.4142
],
["is_left_ppp",
3,
4,
undef,
undef,
undef,
undef,
-463,
17009,
-1583,
1,
-3
],
["dimension_2to3_v",
1,
4,
[undef,undef,0],
[undef,undef,0],
[undef,undef,0],
[99,undef,0],
[99,2,0],
[199,20,55],
[169,27,0],
x_axis3d_uv
],
["get_line_dim",
2,
4,
2,
0,
2,
1,
2,
3,
4,
3,
3
],
["get_line_tp",
2,
4,
[undef,undef],
[60,50],
[58],
[58,16],
[158,116,75],
[178,16,25,20],
y_axis3d_uv
],
["get_line_ip",
2,
4,
[99],
[99,2],
[199,20,55],
[169,27,35,10],
x_axis3d_uv
],
["get_line2origin",
2,
4,
[undef, undef],
[60,50],
[-41],
[-41,14],
[-41,96,20],
[9,-11,-10,10],
[-1,1,0],
[-1,1,0]
],
["dot_ll",
4,
4,
undef,
undef,
3900,
-1230,
-1650,
-5230,
1460,
1,
0
],
["cross_ll",
4,
4,
skip,
skip,
skip,
skip,
810,
[-4776,-1696,-1650],
skip,
[-1,-1,1],
[0,0,4]
],
["striple_lll",
6,
4,
skip,
skip,
skip,
skip,
[-14760,5040],
-219976,
skip,
-2,
0
],
["angle_ll",
4,
4,
undef,
undef,
-2.9357,
undef,
153.8532,
134.4573,
undef,
60,
90
],
["angle_lll",
6,
4,
skip,
skip,
skip,
skip,
skip,
-91.362,
skip,
-63.4349,
0
],
["unit_l",
2,
4,
undef,
undef,
[.7682,0.6402],
[-1],
[-0.9464,0.3231],
[-0.3857,0.9032,0.1882],
[0.44888,-0.5486,-0.4988,0.4988],
[-0.7071,0.7071,0],
[-0.7071,0.7071,0]
],
["are_coplanar_lll",
6,
4,
skip,
skip,
skip,
skip,
skip,
false,
skip,
false,
true
],
["get_pnorm2nv",
2,
4,
skip,
skip,
[60,50,0],
skip,
[0,0,1468],
[-4880,-6235,19924],
skip,
z_axis3d_uv
]
];
function get_value( vid ) =
get_table_v(test_r, test_c, vid,
"tv");
function gv( vid, e ) = get_value( vid )[e];
module run( fname, vid )
{
children();
else if ( show_skipped )
log_info( str(
"*skip*: ", vid,
" '", fname,
"(", value_text,
")'") );
}
module test( fname, fresult, vid, pair )
{
fname_argc =
get_table_v(good_r, good_c, fname,
"fac");
comp_prcsn =
get_table_v(good_r, good_c, fname,
"crp");
test_pass =
validate(cv=fresult, t=
"almost", ev=pass_value, p=comp_prcsn, pf=
true);
farg_text = (pair == true)
:
lstr(
eappend(
", ",
rselect(get_value(vid), [0:fname_argc-1]), r=
false, j=
false, l=
false));
test_text =
validate(str(fname,
"(", farg_text,
")=~", pass_value), fresult,
"almost", pass_value, comp_prcsn);
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,
")'") );
}
run_ids = delete( test_ids, mv=["fac", "crp"] );
for (vid=run_ids) run("distance_pp",vid) test( "distance_pp", distance_pp(gv(vid,0),gv(vid,1)), vid, false );
for (vid=run_ids) run("is_left_ppp",vid) test( "is_left_ppp", is_left_ppp(gv(vid,0),gv(vid,1),gv(vid,2)), vid, false );
for (vid=run_ids) run("dimension_2to3_v",vid) test( "dimension_2to3_v", dimension_2to3_v(gv(vid,0)), vid, false );
for (vid=run_ids) run("get_line_dim",vid) test( "get_line_dim", get_line_dim([gv(vid,0),gv(vid,1)]), vid, true );
for (vid=run_ids) run("get_line_tp",vid) test( "get_line_tp", get_line_tp([gv(vid,0),gv(vid,1)]), vid, true );
for (vid=run_ids) run("get_line_ip",vid) test( "get_line_ip", get_line_ip([gv(vid,0),gv(vid,1)]), vid, true );
for (vid=run_ids) run("get_line2origin",vid) test( "get_line2origin", get_line2origin([gv(vid,0),gv(vid,1)]), vid, true );
for (vid=run_ids) run("dot_ll",vid) test( "dot_ll", dot_ll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)]), vid, true );
for (vid=run_ids) run("cross_ll",vid) test( "cross_ll", cross_ll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)]), vid, true );
for (vid=run_ids) run("striple_lll",vid) test( "striple_lll", striple_lll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)],[gv(vid,4),gv(vid,5)]), vid, true );
for (vid=run_ids) run("angle_ll",vid) test( "angle_ll", angle_ll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)]), vid, true );
for (vid=run_ids) run("angle_lll",vid) test( "angle_lll", angle_lll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)],[gv(vid,4),gv(vid,5)]), vid, true );
for (vid=run_ids) run("unit_l",vid) test( "unit_l", unit_l([gv(vid,0),gv(vid,1)]), vid, true );
for (vid=run_ids) run("are_coplanar_lll",vid) test( "are_coplanar_lll", are_coplanar_lll([gv(vid,0),gv(vid,1)],[gv(vid,2),gv(vid,3)],[gv(vid,4),gv(vid,5)]), vid, true );
for (vid=run_ids) run("get_pnorm2nv",vid) test( "get_pnorm2nv", get_pnorm2nv([gv(vid,0),gv(vid,1)]), vid, true );