mirror of
https://github.com/revarbat/BOSL2.git
synced 2025-08-16 16:44:18 +02:00
Merge pull request #216 from RonaldoCMP/master
Extensive changes in arrays.scad, vectors.scad, common.scad and their regression test codes
This commit is contained in:
@@ -2,10 +2,10 @@ include<../std.scad>
|
||||
include<../polyhedra.scad>
|
||||
|
||||
|
||||
$fn=96;
|
||||
|
||||
if (true) {
|
||||
|
||||
$fn=96;
|
||||
|
||||
// Display of all solids with insphere, midsphere and circumsphere
|
||||
|
||||
for(i=[0:len(_polyhedra_)-1]) {
|
||||
|
@@ -1,37 +1,14 @@
|
||||
include <../std.scad>
|
||||
|
||||
// List/Array Ops
|
||||
|
||||
module test_repeat() {
|
||||
assert(repeat(1, 4) == [1,1,1,1]);
|
||||
assert(repeat(8, [2,3]) == [[8,8,8], [8,8,8]]);
|
||||
assert(repeat(0, [2,2,3]) == [[[0,0,0],[0,0,0]], [[0,0,0],[0,0,0]]]);
|
||||
assert(repeat([1,2,3],3) == [[1,2,3], [1,2,3], [1,2,3]]);
|
||||
}
|
||||
test_repeat();
|
||||
// Section: List Query Operations
|
||||
|
||||
|
||||
module test_in_list() {
|
||||
assert(in_list("bar", ["foo", "bar", "baz"]));
|
||||
assert(!in_list("bee", ["foo", "bar", "baz"]));
|
||||
assert(in_list("bar", [[2,"foo"], [4,"bar"], [3,"baz"]], idx=1));
|
||||
assert(!in_list(undef, [3,4,5]));
|
||||
assert(in_list(undef,[3,4,undef,5]));
|
||||
assert(!in_list(3,[]));
|
||||
assert(!in_list(3,[4,5,[3]]));
|
||||
|
||||
}
|
||||
test_in_list();
|
||||
|
||||
|
||||
module test_slice() {
|
||||
assert(slice([3,4,5,6,7,8,9], 3, 5) == [6,7]);
|
||||
assert(slice([3,4,5,6,7,8,9], 2, -1) == [5,6,7,8,9]);
|
||||
assert(slice([3,4,5,6,7,8,9], 1, 1) == []);
|
||||
assert(slice([3,4,5,6,7,8,9], 6, -1) == [9]);
|
||||
assert(slice([3,4,5,6,7,8,9], 2, -2) == [5,6,7,8]);
|
||||
}
|
||||
test_slice();
|
||||
module test_is_simple_list() {
|
||||
assert(is_simple_list([1,2,3,4]));
|
||||
assert(is_simple_list([]));
|
||||
assert(!is_simple_list([1,2,[3,4]]));
|
||||
}
|
||||
test_is_simple_list();
|
||||
|
||||
|
||||
module test_select() {
|
||||
@@ -49,6 +26,74 @@ module test_select() {
|
||||
test_select();
|
||||
|
||||
|
||||
module test_slice() {
|
||||
assert(slice([3,4,5,6,7,8,9], 3, 5) == [6,7]);
|
||||
assert(slice([3,4,5,6,7,8,9], 2, -1) == [5,6,7,8,9]);
|
||||
assert(slice([3,4,5,6,7,8,9], 1, 1) == []);
|
||||
assert(slice([3,4,5,6,7,8,9], 6, -1) == [9]);
|
||||
assert(slice([3,4,5,6,7,8,9], 2, -2) == [5,6,7,8]);
|
||||
assert(slice([], 2, -2) == []);
|
||||
}
|
||||
test_slice();
|
||||
|
||||
|
||||
module test_in_list() {
|
||||
assert(in_list("bar", ["foo", "bar", "baz"]));
|
||||
assert(!in_list("bee", ["foo", "bar", "baz"]));
|
||||
assert(in_list("bar", [[2,"foo"], [4,"bar"], [3,"baz"]], idx=1));
|
||||
assert(!in_list("bee", ["foo", "bar", ["bee"]]));
|
||||
assert(in_list(NAN, [NAN])==false);
|
||||
assert(!in_list(undef, [3,4,5]));
|
||||
assert(in_list(undef,[3,4,undef,5]));
|
||||
assert(!in_list(3,[]));
|
||||
assert(!in_list(3,[4,5,[3]]));
|
||||
}
|
||||
test_in_list();
|
||||
|
||||
|
||||
module test_min_index() {
|
||||
assert(min_index([5,3,9,6,2,7,8,2,1])==8);
|
||||
assert(min_index([5,3,9,6,2,7,8,2,7],all=true)==[4,7]);
|
||||
// assert(min_index([],all=true)==[]);
|
||||
}
|
||||
test_min_index();
|
||||
|
||||
|
||||
module test_max_index() {
|
||||
assert(max_index([5,3,9,6,2,7,8,9,1])==2);
|
||||
assert(max_index([5,3,9,6,2,7,8,9,7],all=true)==[2,7]);
|
||||
// assert(max_index([],all=true)==[]);
|
||||
}
|
||||
test_max_index();
|
||||
|
||||
|
||||
module test_list_increasing() {
|
||||
assert(list_increasing([1,2,3,4]) == true);
|
||||
assert(list_increasing([1,3,2,4]) == false);
|
||||
assert(list_increasing([4,3,2,1]) == false);
|
||||
}
|
||||
test_list_increasing();
|
||||
|
||||
|
||||
module test_list_decreasing() {
|
||||
assert(list_decreasing([1,2,3,4]) == false);
|
||||
assert(list_decreasing([4,2,3,1]) == false);
|
||||
assert(list_decreasing([4,3,2,1]) == true);
|
||||
}
|
||||
test_list_decreasing();
|
||||
|
||||
// Section: Basic List Generation
|
||||
|
||||
module test_repeat() {
|
||||
assert(repeat(1, 4) == [1,1,1,1]);
|
||||
assert(repeat(8, [2,3]) == [[8,8,8], [8,8,8]]);
|
||||
assert(repeat(0, [2,2,3]) == [[[0,0,0],[0,0,0]], [[0,0,0],[0,0,0]]]);
|
||||
assert(repeat([1,2,3],3) == [[1,2,3], [1,2,3], [1,2,3]]);
|
||||
assert(repeat(4, [2,-1]) == [[], []]);
|
||||
}
|
||||
test_repeat();
|
||||
|
||||
|
||||
module test_list_range() {
|
||||
assert(list_range(4) == [0,1,2,3]);
|
||||
assert(list_range(n=4, step=2) == [0,2,4,6]);
|
||||
@@ -66,6 +111,8 @@ test_list_range();
|
||||
|
||||
module test_reverse() {
|
||||
assert(reverse([3,4,5,6]) == [6,5,4,3]);
|
||||
assert(reverse("abcd") == ["d","c","b","a"]);
|
||||
assert(reverse([]) == []);
|
||||
}
|
||||
test_reverse();
|
||||
|
||||
@@ -90,6 +137,8 @@ module test_deduplicate() {
|
||||
assert(deduplicate(closed=true, [8,3,4,4,4,8,2,3,3,8,8]) == [8,3,4,8,2,3]);
|
||||
assert(deduplicate("Hello") == ["H","e","l","o"]);
|
||||
assert(deduplicate([[3,4],[7,1.99],[7,2],[1,4]],eps=0.1) == [[3,4],[7,2],[1,4]]);
|
||||
assert(deduplicate([], closed=true) == []);
|
||||
assert(deduplicate([[1,[1,[undef]]],[1,[1,[undef]]],[1,[2]],[1,[2,[0]]]])==[[1, [1,[undef]]],[1,[2]],[1,[2,[0]]]]);
|
||||
}
|
||||
test_deduplicate();
|
||||
|
||||
@@ -148,22 +197,6 @@ module test_list_bset() {
|
||||
test_list_bset();
|
||||
|
||||
|
||||
module test_list_increasing() {
|
||||
assert(list_increasing([1,2,3,4]) == true);
|
||||
assert(list_increasing([1,3,2,4]) == false);
|
||||
assert(list_increasing([4,3,2,1]) == false);
|
||||
}
|
||||
test_list_increasing();
|
||||
|
||||
|
||||
module test_list_decreasing() {
|
||||
assert(list_decreasing([1,2,3,4]) == false);
|
||||
assert(list_decreasing([4,2,3,1]) == false);
|
||||
assert(list_decreasing([4,3,2,1]) == true);
|
||||
}
|
||||
test_list_decreasing();
|
||||
|
||||
|
||||
module test_list_shortest() {
|
||||
assert(list_shortest(["foobar", "bazquxx", "abcd"]) == 4);
|
||||
}
|
||||
@@ -315,6 +348,13 @@ test_set_intersection();
|
||||
// Arrays
|
||||
|
||||
|
||||
module test_add_scalar() {
|
||||
assert(add_scalar([1,2,3],3) == [4,5,6]);
|
||||
assert(add_scalar([[1,2,3],[3,4,5]],3) == [[4,5,6],[6,7,8]]);
|
||||
}
|
||||
test_add_scalar();
|
||||
|
||||
|
||||
module test_subindex() {
|
||||
v = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]];
|
||||
assert(subindex(v,2) == [3, 7, 11, 15]);
|
||||
@@ -402,10 +442,18 @@ test_array_group();
|
||||
|
||||
module test_flatten() {
|
||||
assert(flatten([[1,2,3], [4,5,[6,7,8]]]) == [1,2,3,4,5,[6,7,8]]);
|
||||
assert(flatten([]) == []);
|
||||
}
|
||||
test_flatten();
|
||||
|
||||
|
||||
module test_full_flatten() {
|
||||
assert(full_flatten([[1,2,3], [4,5,[6,[7],8]]]) == [1,2,3,4,5,6,7,8]);
|
||||
assert(full_flatten([]) == []);
|
||||
}
|
||||
test_full_flatten();
|
||||
|
||||
|
||||
module test_array_dim() {
|
||||
assert(array_dim([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) == [2,2,3]);
|
||||
assert(array_dim([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]], 0) == 2);
|
||||
|
@@ -18,6 +18,10 @@ module test_typeof() {
|
||||
assert(typeof([0:1:5]) == "range");
|
||||
assert(typeof([-3:2:5]) == "range");
|
||||
assert(typeof([10:-2:-10]) == "range");
|
||||
assert(typeof([0:NAN:INF]) == "invalid");
|
||||
assert(typeof([0:"a":INF]) == "undef");
|
||||
assert(typeof([0:[]:INF]) == "undef");
|
||||
assert(typeof([true:1:INF]) == "undef");
|
||||
}
|
||||
test_typeof();
|
||||
|
||||
@@ -102,6 +106,8 @@ module test_is_int() {
|
||||
assert(!is_int(-99.1));
|
||||
assert(!is_int(99.1));
|
||||
assert(!is_int(undef));
|
||||
assert(!is_int(INF));
|
||||
assert(!is_int(NAN));
|
||||
assert(!is_int(false));
|
||||
assert(!is_int(true));
|
||||
assert(!is_int("foo"));
|
||||
@@ -124,6 +130,8 @@ module test_is_integer() {
|
||||
assert(!is_integer(-99.1));
|
||||
assert(!is_integer(99.1));
|
||||
assert(!is_integer(undef));
|
||||
assert(!is_integer(INF));
|
||||
assert(!is_integer(NAN));
|
||||
assert(!is_integer(false));
|
||||
assert(!is_integer(true));
|
||||
assert(!is_integer("foo"));
|
||||
@@ -161,16 +169,33 @@ module test_is_range() {
|
||||
assert(!is_range(5));
|
||||
assert(!is_range(INF));
|
||||
assert(!is_range(-INF));
|
||||
assert(!is_nan(NAN));
|
||||
assert(!is_range(""));
|
||||
assert(!is_range("foo"));
|
||||
assert(!is_range([]));
|
||||
assert(!is_range([3,4,5]));
|
||||
assert(!is_range([INF:4:5]));
|
||||
assert(!is_range([3:NAN:5]));
|
||||
assert(!is_range([3:4:"a"]));
|
||||
assert(is_range([3:1:5]));
|
||||
}
|
||||
test_is_nan();
|
||||
test_is_range();
|
||||
|
||||
|
||||
module test_valid_range() {
|
||||
assert(valid_range([0:0]));
|
||||
assert(valid_range([0:1:0]));
|
||||
assert(valid_range([0:1:10]));
|
||||
assert(valid_range([0.1:1.1:2.1]));
|
||||
assert(valid_range([0:-1:0]));
|
||||
assert(valid_range([10:-1:0]));
|
||||
assert(valid_range([2.1:-1.1:0.1]));
|
||||
assert(!valid_range([10:1:0]));
|
||||
assert(!valid_range([2.1:1.1:0.1]));
|
||||
assert(!valid_range([0:-1:10]));
|
||||
assert(!valid_range([0.1:-1.1:2.1]));
|
||||
}
|
||||
test_valid_range();
|
||||
|
||||
module test_is_list_of() {
|
||||
assert(is_list_of([3,4,5], 0));
|
||||
assert(!is_list_of([3,4,undef], 0));
|
||||
@@ -181,10 +206,14 @@ module test_is_list_of() {
|
||||
}
|
||||
test_is_list_of();
|
||||
|
||||
|
||||
module test_is_consistent() {
|
||||
assert(is_consistent([]));
|
||||
assert(is_consistent([[],[]]));
|
||||
assert(is_consistent([3,4,5]));
|
||||
assert(is_consistent([[3,4],[4,5],[6,7]]));
|
||||
assert(is_consistent([[[3],4],[[4],5]]));
|
||||
assert(!is_consistent(5));
|
||||
assert(!is_consistent(undef));
|
||||
assert(!is_consistent([[3,4,5],[3,4]]));
|
||||
assert(is_consistent([[3,[3,4,[5]]], [5,[2,9,[9]]]]));
|
||||
assert(!is_consistent([[3,[3,4,[5]]], [5,[2,9,9]]]));
|
||||
@@ -331,11 +360,25 @@ module test_scalar_vec3() {
|
||||
assert(scalar_vec3([3]) == [3,0,0]);
|
||||
assert(scalar_vec3([3,4]) == [3,4,0]);
|
||||
assert(scalar_vec3([3,4],dflt=1) == [3,4,1]);
|
||||
assert(scalar_vec3([3,"a"],dflt=1) == [3,"a",1]);
|
||||
assert(scalar_vec3([3,[2]],dflt=1) == [3,[2],1]);
|
||||
assert(scalar_vec3([3],dflt=1) == [3,1,1]);
|
||||
assert(scalar_vec3([3,4,5]) == [3,4,5]);
|
||||
assert(scalar_vec3([3,4,5,6]) == [3,4,5]);
|
||||
assert(scalar_vec3([3,4,5,6]) == [3,4,5]);
|
||||
}
|
||||
test_scalar_vec3();
|
||||
|
||||
|
||||
module test_segs() {
|
||||
assert_equal(segs(50,$fn=8), 8);
|
||||
assert_equal(segs(50,$fa=2,$fs=2), 158);
|
||||
assert(segs(1)==5);
|
||||
assert(segs(11)==30);
|
||||
// assert(segs(1/0)==5);
|
||||
// assert(segs(0/0)==5);
|
||||
// assert(segs(undef)==5);
|
||||
}
|
||||
test_segs();
|
||||
|
||||
// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
||||
|
@@ -110,6 +110,8 @@ module test_approx() {
|
||||
assert_equal(approx(1/3, 0.3333333333), true);
|
||||
assert_equal(approx(-1/3, -0.3333333333), true);
|
||||
assert_equal(approx(10*[cos(30),sin(30)], 10*[sqrt(3)/2, 1/2]), true);
|
||||
assert_equal(approx([1,[1,undef]], [1+1e-12,[1,true]]), false);
|
||||
assert_equal(approx([1,[1,undef]], [1+1e-12,[1,undef]]), true);
|
||||
}
|
||||
test_approx();
|
||||
|
||||
@@ -389,7 +391,6 @@ module test_mean() {
|
||||
}
|
||||
test_mean();
|
||||
|
||||
|
||||
module test_median() {
|
||||
assert_equal(median([2,3,7]), 4.5);
|
||||
assert_equal(median([[1,2,3], [3,4,5], [8,9,10]]), [4.5,5.5,6.5]);
|
||||
@@ -397,6 +398,16 @@ module test_median() {
|
||||
test_median();
|
||||
|
||||
|
||||
module test_convolve() {
|
||||
assert_equal(convolve([],[1,2,1]), []);
|
||||
assert_equal(convolve([1,1],[]), []);
|
||||
assert_equal(convolve([1,1],[1,2,1]), [1,3,3,1]);
|
||||
assert_equal(convolve([1,2,3],[1,2,1]), [1,4,8,8,3]);
|
||||
}
|
||||
test_convolve();
|
||||
|
||||
|
||||
|
||||
module test_matrix_inverse() {
|
||||
assert_approx(matrix_inverse(rot([20,30,40])), [[0.663413948169,0.556670399226,-0.5,0],[-0.47302145844,0.829769465589,0.296198132726,0],[0.579769465589,0.0400087565481,0.813797681349,0],[0,0,0,1]]);
|
||||
}
|
||||
@@ -583,6 +594,24 @@ module test_factorial() {
|
||||
}
|
||||
test_factorial();
|
||||
|
||||
module test_binomial() {
|
||||
assert_equal(binomial(1), [1,1]);
|
||||
assert_equal(binomial(2), [1,2,1]);
|
||||
assert_equal(binomial(3), [1,3,3,1]);
|
||||
assert_equal(binomial(5), [1,5,10,10,5,1]);
|
||||
}
|
||||
test_binomial();
|
||||
|
||||
module test_binomial_coefficient() {
|
||||
assert_equal(binomial_coefficient(2,1), 2);
|
||||
assert_equal(binomial_coefficient(3,2), 3);
|
||||
assert_equal(binomial_coefficient(4,2), 6);
|
||||
assert_equal(binomial_coefficient(10,7), 120);
|
||||
assert_equal(binomial_coefficient(10,7), binomial(10)[7]);
|
||||
assert_equal(binomial_coefficient(15,4), binomial(15)[4]);
|
||||
}
|
||||
test_binomial_coefficient();
|
||||
|
||||
|
||||
module test_gcd() {
|
||||
assert_equal(gcd(15,25), 5);
|
||||
@@ -682,6 +711,7 @@ test_linear_solve();
|
||||
|
||||
module test_outer_product(){
|
||||
assert_equal(outer_product([1,2,3],[4,5,6]), [[4,5,6],[8,10,12],[12,15,18]]);
|
||||
assert_equal(outer_product([1,2],[4,5,6]), [[4,5,6],[8,10,12]]);
|
||||
assert_equal(outer_product([9],[7]), [[63]]);
|
||||
}
|
||||
test_outer_product();
|
||||
@@ -782,8 +812,10 @@ test_deriv3();
|
||||
|
||||
|
||||
module test_polynomial(){
|
||||
assert_equal(polynomial([],12),0);
|
||||
assert_equal(polynomial([],[12,4]),[0,0]);
|
||||
assert_equal(polynomial([0],12),0);
|
||||
assert_equal(polynomial([0],[12,4]),[0,0]);
|
||||
// assert_equal(polynomial([],12),0);
|
||||
// assert_equal(polynomial([],[12,4]),[0,0]);
|
||||
assert_equal(polynomial([1,2,3,4],3),58);
|
||||
assert_equal(polynomial([1,2,3,4],[3,-1]),[47,-41]);
|
||||
assert_equal(polynomial([0,0,2],4),2);
|
||||
@@ -879,16 +911,20 @@ test_qr_factor();
|
||||
|
||||
module test_poly_mult(){
|
||||
assert_equal(poly_mult([3,2,1],[4,5,6,7]),[12,23,32,38,20,7]);
|
||||
assert_equal(poly_mult([3,2,1],[]),[]);
|
||||
assert_equal(poly_mult([3,2,1],[0]),[0]);
|
||||
// assert_equal(poly_mult([3,2,1],[]),[]);
|
||||
assert_equal(poly_mult([[1,2],[3,4],[5,6]]), [15,68,100,48]);
|
||||
assert_equal(poly_mult([[1,2],[],[5,6]]), []);
|
||||
assert_equal(poly_mult([[3,4,5],[0,0,0]]),[]);
|
||||
assert_equal(poly_mult([[1,2],[0],[5,6]]), [0]);
|
||||
// assert_equal(poly_mult([[1,2],[],[5,6]]), []);
|
||||
assert_equal(poly_mult([[3,4,5],[0,0,0]]),[0]);
|
||||
// assert_equal(poly_mult([[3,4,5],[0,0,0]]),[]);
|
||||
}
|
||||
test_poly_mult();
|
||||
|
||||
|
||||
|
||||
module test_poly_div(){
|
||||
assert_equal(poly_div(poly_mult([4,3,3,2],[2,1,3]), [2,1,3]),[[4,3,3,2],[]]);
|
||||
assert_equal(poly_div(poly_mult([4,3,3,2],[2,1,3]), [2,1,3]),[[4,3,3,2],[0]]);
|
||||
// assert_equal(poly_div(poly_mult([4,3,3,2],[2,1,3]), [2,1,3]),[[4,3,3,2],[]]);
|
||||
assert_equal(poly_div([1,2,3,4],[1,2,3,4,5]), [[], [1,2,3,4]]);
|
||||
assert_equal(poly_div(poly_add(poly_mult([1,2,3,4],[2,0,2]), [1,1,2]), [1,2,3,4]), [[2,0,2],[1,1,2]]);
|
||||
assert_equal(poly_div([1,2,3,4], [1,-3]), [[1,5,18],[58]]);
|
||||
@@ -899,7 +935,8 @@ test_poly_div();
|
||||
module test_poly_add(){
|
||||
assert_equal(poly_add([2,3,4],[3,4,5,6]),[3,6,8,10]);
|
||||
assert_equal(poly_add([1,2,3,4],[-1,-2,3,4]), [6,8]);
|
||||
assert_equal(poly_add([1,2,3],-[1,2,3]),[]);
|
||||
assert_equal(poly_add([1,2,3],-[1,2,3]),[0]);
|
||||
// assert_equal(poly_add([1,2,3],-[1,2,3]),[]);
|
||||
}
|
||||
test_poly_add();
|
||||
|
||||
|
@@ -9,6 +9,7 @@ module test_is_vector() {
|
||||
assert(is_vector(1) == false);
|
||||
assert(is_vector("foo") == false);
|
||||
assert(is_vector(true) == false);
|
||||
|
||||
assert(is_vector([0,0,0],zero=true) == true);
|
||||
assert(is_vector([0,0,0],zero=false) == false);
|
||||
assert(is_vector([0,1,0],zero=true) == false);
|
||||
@@ -17,13 +18,6 @@ module test_is_vector() {
|
||||
test_is_vector();
|
||||
|
||||
|
||||
module test_add_scalar() {
|
||||
assert(add_scalar([1,2,3],3) == [4,5,6]);
|
||||
assert(add_scalar([[1,2,3],[3,4,5]],3) == [[4,5,6],[6,7,8]]);
|
||||
}
|
||||
test_add_scalar();
|
||||
|
||||
|
||||
module test_vfloor() {
|
||||
assert_equal(vfloor([2.0, 3.14, 18.9, 7]), [2,3,18,7]);
|
||||
assert_equal(vfloor([-2.0, -3.14, -18.9, -7]), [-2,-4,-19,-7]);
|
||||
|
Reference in New Issue
Block a user