diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 12 | ||||
| -rw-r--r-- | tests/cgalstlsanitytest.cc | 163 | ||||
| -rw-r--r-- | tests/regression/cgalstlsanitytest/normal-nan-expected.txt | 0 | 
3 files changed, 175 insertions, 0 deletions
| diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a8ab9b9..b374188 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -361,6 +361,13 @@ set_target_properties(cgaltest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CX  target_link_libraries(cgaltest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES})  # +# cgalstlsanitytest +# +add_executable(cgalstlsanitytest cgalstlsanitytest.cc) +set_target_properties(cgalstlsanitytest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") +target_link_libraries(cgalstlsanitytest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) + +#  # cgalpngtest  #  add_executable(cgalpngtest cgalpngtest.cc bboxhelp.cc ../src/CGALRenderer.cc ../src/renderer.cc ../src/rendersettings.cc) @@ -535,6 +542,8 @@ list(APPEND OPENCSGTEST_FILES ${CGALPNGTEST_FILES})  list(APPEND OPENCSGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/bbox-transform-bug.scad)  list(APPEND THROWNTOGETHERTEST_FILES ${OPENCSGTEST_FILES}) +list(APPEND CGALSTLSANITYTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/normal-nan.scad) +  # Disable tests which are known to cause floating point comparison issues  # Once we're capable of comparing these across platforms, we can put these back in  disable_tests(dumptest_transform-tests @@ -598,6 +607,9 @@ add_cmdline_test(csgtermtest txt ${MINIMAL_FILES})  add_cmdline_test(cgalpngtest png ${CGALPNGTEST_FILES})  add_cmdline_test(opencsgtest png ${OPENCSGTEST_FILES})  add_cmdline_test(throwntogethertest png ${THROWNTOGETHERTEST_FILES}) +# FIXME: We don't actually need to compare the output of cgalstlsanitytest +# with anything. It's self-contained and returns != 0 on error +add_cmdline_test(cgalstlsanitytest txt ${CGALSTLSANITYTEST_FILES})  message("Available test configurations: ${TEST_CONFIGS}")  #foreach(CONF ${TEST_CONFIGS}) diff --git a/tests/cgalstlsanitytest.cc b/tests/cgalstlsanitytest.cc new file mode 100644 index 0000000..a078dff --- /dev/null +++ b/tests/cgalstlsanitytest.cc @@ -0,0 +1,163 @@ +/* + *  OpenSCAD (www.openscad.org) + *  Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and + *                          Marius Kintel <marius@kintel.net> + * + *  This program is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 2 of the License, or + *  (at your option) any later version. + * + *  As a special exception, you have permission to link this program + *  with the CGAL library and distribute executables, as long as you + *  follow the requirements of the GNU GPL in regard to all of the + *  software in the executable aside from CGAL. + * + *  This program is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + */ + +#include "tests-common.h" +#include "openscad.h" +#include "node.h" +#include "module.h" +#include "context.h" +#include "value.h" +#include "export.h" +#include "builtin.h" +#include "Tree.h" +#include "CGAL_Nef_polyhedron.h" +#include "CGALEvaluator.h" +#include "PolySetCGALEvaluator.h" + +#include <QApplication> +#include <QFile> +#include <QDir> +#include <QSet> +#include <QTextStream> +#ifndef _MSC_VER +#include <getopt.h> +#endif +#include <iostream> +#include <assert.h> +#include <sstream> + +std::string commandline_commands; +QString currentdir; +QString examplesdir; +QString librarydir; + +using std::string; + +void cgalTree(Tree &tree) +{ +	assert(tree.root()); + +	CGALEvaluator evaluator(tree); +	Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); +	evaluate.execute(); +} + +AbstractNode *find_root_tag(AbstractNode *n) +{ +	foreach(AbstractNode *v, n->children) { +		if (v->modinst->tag_root) return v; +		if (AbstractNode *vroot = find_root_tag(v)) return vroot; +	} +	return NULL; +} + +int main(int argc, char **argv) +{ +	int retval = 0; + +	if (argc != 3) { +		fprintf(stderr, "Usage: %s <file.scad> <output.txt>\n", argv[0]); +		exit(1); +	} + +	const char *filename = argv[1]; +	const char *outfilename = argv[2]; + +	Builtins::instance()->initialize(); + +	QApplication app(argc, argv, false); +	QDir original_path = QDir::current(); + +	currentdir = QDir::currentPath(); + +	QDir libdir(QApplication::instance()->applicationDirPath()); +#ifdef Q_WS_MAC +	libdir.cd("../Resources"); // Libraries can be bundled +	if (!libdir.exists("libraries")) libdir.cd("../../.."); +#elif defined(Q_OS_UNIX) +	if (libdir.cd("../share/openscad/libraries")) { +		librarydir = libdir.path(); +	} else +	if (libdir.cd("../../share/openscad/libraries")) { +		librarydir = libdir.path(); +	} else +	if (libdir.cd("../../libraries")) { +		librarydir = libdir.path(); +	} else +#endif +	if (libdir.cd("libraries")) { +		librarydir = libdir.path(); +	} + +	Context root_ctx; +	register_builtin(root_ctx); + +	AbstractModule *root_module; +	ModuleInstantiation root_inst; + +	root_module = parsefile(filename); +	if (!root_module) { +		exit(1); +	} + +	QFileInfo fileInfo(filename); +	QDir::setCurrent(fileInfo.absolutePath()); + +	AbstractNode::resetIndexCounter(); +	AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); +	AbstractNode *root_node; +	// Do we have an explicit root node (! modifier)? +	if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; + +	Tree tree(root_node); + +	CGALEvaluator cgalevaluator(tree); + 	PolySetCGALEvaluator psevaluator(cgalevaluator); + +	CGAL_Nef_polyhedron N = cgalevaluator.evaluateCGALMesh(*root_node); + +	QDir::setCurrent(original_path.absolutePath()); +	if (!N.empty()) { +		std::ofstream outfile; +		outfile.open(outfilename); + +		std::stringstream out; +		export_stl(&N, out, NULL); +		if (out.str().find("nan") != string::npos) { +			outfile << "Error: nan found\n"; +			retval = 2; +		} +		if (out.str().find("inf") != string::npos) { +			outfile << "Error: inf found\n"; +			retval = 2; +		} +		outfile.close(); +	} + +	Builtins::instance(true); + +	return retval; +} diff --git a/tests/regression/cgalstlsanitytest/normal-nan-expected.txt b/tests/regression/cgalstlsanitytest/normal-nan-expected.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/regression/cgalstlsanitytest/normal-nan-expected.txt | 
