From 9d55e33b36d8b7fa802ebf6e962375828b05913d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 24 Jan 2014 13:12:27 -0500 Subject: [PATCH 1/2] Updated forgotten test results related to commit 34ae2b8f68b73b91f5c4c522620aeed8e5a9e7b7 --- .../difference-2d-tests-expected.png | Bin 12369 -> 11777 bytes .../difference-tests-expected.png | Bin 11511 -> 11629 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/regression/throwntogethertest/difference-2d-tests-expected.png b/tests/regression/throwntogethertest/difference-2d-tests-expected.png index 4aae3bebf7b8248880854592ba944e29fae78d13..ee2015e4addc8dd7a8efe4039d37afeccfad3061 100644 GIT binary patch literal 11777 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 literal 12369 zcmeHO^JXGX+)*jfJY^z z1QZyfn~jdaw$I_8`2O&HJwKiE+UvUC=en-@iaXwWYGS0r$tJ)C005_+?)6&$00m#6 z0PEo+OyF7x0Lby{UDq-XhOA_T6}#LHz{)Z5qpHr

r=%9kz3198prvx9Q^Ks4h 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

n$3>|e@;Cm^tqdpQ$UusY$XO>mC$ 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 SjDgCi0iElH*D5q@gZ~ezM2eaK literal 11511 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 wHweQJCjc+>pXmQ-{Xf9`w@v?FJ Date: Thu, 23 Jan 2014 21:19:15 +0100 Subject: [PATCH 2/2] Handle NaN / +Inf / -Inf in range evaluation (fixes #606). --- src/value.cc | 10 +++++- testdata/scad/features/for-tests.scad | 36 +++++++++++++++++++ tests/CMakeLists.txt | 1 + .../dumptest/for-tests-expected.csg | 32 +++++++++++++++++ .../echotest/for-tests-expected.echo | 27 ++++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 tests/regression/echotest/for-tests-expected.echo diff --git a/src/value.cc b/src/value.cc index c8a88c69..3a6540f1 100644 --- a/src/value.cc +++ b/src/value.cc @@ -39,6 +39,10 @@ /*Unicode support for string lengths and array accesses*/ #include +#include +using boost::math::isnan; +using boost::math::isinf; + std::ostream &operator<<(std::ostream &stream, const Filename &filename) { fs::path fnpath = fs::path( (std::string)filename ); @@ -642,7 +646,11 @@ void Value::RangeType::normalize() { } uint32_t Value::RangeType::nbsteps() const { - if (begin_val == end_val) { + if (isnan(step_val) || isinf(begin_val) || (isinf(end_val))) { + return std::numeric_limits::max(); + } + + if ((begin_val == end_val) || isinf(step_val)) { return 0; } diff --git a/testdata/scad/features/for-tests.scad b/testdata/scad/features/for-tests.scad index 10295b12..6bb7f697 100644 --- a/testdata/scad/features/for-tests.scad +++ b/testdata/scad/features/for-tests.scad @@ -39,3 +39,39 @@ for(r=[1:true:5]) translate([r*10-60,50,0]) cylinder(r=r); // Vector for(r=[1,2,5]) translate([r*10-30,0,0]) cylinder(r=r); + +nan = 0/0; +inf = 1/0; +ninf = -1/0; + +echo(nan); +echo(inf); +echo(ninf); + +// validate step values +for(i=[0:nan:0]) { echo("NAN", i); } +for(i=[0:inf:0]) { echo("INF", i); } +for(i=[0:ninf:0]) { echo("-INF", i); } + +for(i=[0:nan:1]) { echo("NAN", i); } +for(i=[0:inf:1]) { echo("INF", i); } +for(i=[0:ninf:1]) { echo("-INF", i); } + +for(i=[1:nan:0]) { echo("NAN", i); } +for(i=[1:inf:0]) { echo("INF", i); } +for(i=[1:ninf:0]) { echo("-INF", i); } + +// validate begin / end values +for(i = [0:inf]) {} +for(i = [0:ninf]) {} +for(i = [inf:0]) {} +for(i = [ninf:0]) {} + +for(i = [0:2:inf]) {} +for(i = [0:2:ninf]) {} +for(i = [inf:2:0]) {} +for(i = [ninf:2:0]) {} +for(i = [inf:2:inf]) {} +for(i = [ninf:2:ninf]) {} +for(i = [inf:2:ninf]) {} +for(i = [ninf:2:inf]) {} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 053dbf9d..e9f2b749 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -804,6 +804,7 @@ file(GLOB FUNCTION_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/functions/*.scad) file(GLOB EXAMPLE_FILES ${CMAKE_SOURCE_DIR}/../examples/*.scad) list(APPEND ECHO_FILES ${FUNCTION_FILES} + ${CMAKE_SOURCE_DIR}/../testdata/scad/features/for-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/echo-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/parser-tests.scad diff --git a/tests/regression/dumptest/for-tests-expected.csg b/tests/regression/dumptest/for-tests-expected.csg index b61d9cdc..4f79afcb 100644 --- a/tests/regression/dumptest/for-tests-expected.csg +++ b/tests/regression/dumptest/for-tests-expected.csg @@ -128,4 +128,36 @@ group() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } } + group(); + group(); + group(); + group(); + group() { + group(); + } + group() { + group(); + } + group(); + group() { + group(); + } + group(); + group(); + group(); + group() { + group(); + } + group(); + group(); + group(); + group(); + group(); + group(); + group(); + group(); + group(); + group(); + group(); + group(); } diff --git a/tests/regression/echotest/for-tests-expected.echo b/tests/regression/echotest/for-tests-expected.echo new file mode 100644 index 00000000..7820a41c --- /dev/null +++ b/tests/regression/echotest/for-tests-expected.echo @@ -0,0 +1,27 @@ +DEPRECATED: Using ranges of the form [begin:end] with begin value greater than the end value is deprecated. +DEPRECATED: Using ranges of the form [begin:end] with begin value greater than the end value is deprecated. +WARNING: Bad range parameter in for statement: too many elements (4294967295). +ECHO: nan +ECHO: inf +ECHO: -inf +WARNING: Bad range parameter in for statement: too many elements (4294967295). +ECHO: "INF", 0 +ECHO: "-INF", 0 +WARNING: Bad range parameter in for statement: too many elements (4294967295). +ECHO: "INF", 0 +WARNING: Bad range parameter in for statement: too many elements (4294967295). +ECHO: "-INF", 1 +WARNING: Bad range parameter in for statement: too many elements (4294967295). +DEPRECATED: Using ranges of the form [begin:end] with begin value greater than the end value is deprecated. +WARNING: Bad range parameter in for statement: too many elements (4294967295). +DEPRECATED: Using ranges of the form [begin:end] with begin value greater than the end value is deprecated. +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295). +WARNING: Bad range parameter in for statement: too many elements (4294967295).