diff options
author | chrysn <chrysn@fsfe.org> | 2013-06-28 09:47:17 (GMT) |
---|---|---|
committer | chrysn <chrysn@fsfe.org> | 2013-06-28 09:47:17 (GMT) |
commit | 4d18db65e3d1f31057012bd53c57ce51ad6417dd (patch) | |
tree | 7fd420bccad4235f881ded0ee35081a7481b066f | |
parent | 28e420d8712a73e66db328cdb80a8b09f6f9a0b4 (diff) |
python validation for cgal stl sanity test
this drops another static binary and replaces it with a very small
shell^Wpython script (again, python used to avoid sed / grep
implementation differences)
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 9 | ||||
-rwxr-xr-x | tests/cgalstlsanitytest | 16 | ||||
-rw-r--r-- | tests/cgalstlsanitytest.cc | 146 |
4 files changed, 17 insertions, 155 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 8860ee7..a0bddd4 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -13,7 +13,6 @@ out.png /parser_yacc.c /csgtexttest /throwntogethertest -/cgalstlsanitytest /cgalcachetest /modulecachetest /test_pretty_print diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5a44b8a..714465d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -534,13 +534,6 @@ add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) target_link_libraries(csgtexttest tests-nocgal ${TESTS-NOCGAL-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 ${TESTS-CGAL-LIBRARIES}) - -# # cgalcachetest # add_executable(cgalcachetest cgalcachetest.cc) @@ -895,7 +888,7 @@ add_cmdline_test(opencsgtest EXE ${GUI_BINPATH} ARGS -o SUFFIX png FILES ${OPENC add_cmdline_test(throwntogethertest SUFFIX png FILES ${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 SUFFIX txt FILES ${CGALSTLSANITYTEST_FILES}) +add_cmdline_test(cgalstlsanitytest SUFFIX txt ARGS ${GUI_BINPATH} FILES ${CGALSTLSANITYTEST_FILES}) # Tests using the actual OpenSCAD binary diff --git a/tests/cgalstlsanitytest b/tests/cgalstlsanitytest new file mode 100755 index 0000000..0ec9ef4 --- /dev/null +++ b/tests/cgalstlsanitytest @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +import re, sys, subprocess, os + +stlfile = sys.argv[3] + '.stl' + +subprocess.check_call([sys.argv[2], sys.argv[1], '-o', stlfile]) + +result = open(stlfile).read() + +os.unlink(stlfile) + +if 'nan' in result or 'inf' in result: + sys.exit(1) + +open(sys.argv[3], 'w').write('') # this check only works on return values diff --git a/tests/cgalstlsanitytest.cc b/tests/cgalstlsanitytest.cc deleted file mode 100644 index 4be7767..0000000 --- a/tests/cgalstlsanitytest.cc +++ /dev/null @@ -1,146 +0,0 @@ -/* - * 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 "parsersettings.h" -#include "node.h" -#include "module.h" -#include "modcontext.h" -#include "value.h" -#include "export.h" -#include "builtin.h" -#include "Tree.h" -#include "CGAL_Nef_polyhedron.h" -#include "CGALEvaluator.h" -#include "PolySetCGALEvaluator.h" - -#ifndef _MSC_VER -#include <getopt.h> -#endif -#include <iostream> -#include <assert.h> -#include <sstream> - -#include <boost/filesystem.hpp> -namespace fs = boost::filesystem; -#include "boosty.h" - -std::string commandline_commands; -std::string currentdir; - -using std::string; - -void cgalTree(Tree &tree) -{ - assert(tree.root()); - - CGALEvaluator evaluator(tree); - Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); - evaluate.execute(); -} - -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(); - - fs::path original_path = fs::current_path(); - - currentdir = boosty::stringy( fs::current_path() ); - - parser_init(boosty::stringy(fs::path(argv[0]).branch_path())); - add_librarydir(boosty::stringy(fs::path(argv[0]).branch_path() / "../libraries")); - - ModuleContext top_ctx; - top_ctx.registerBuiltin(); - - FileModule *root_module; - ModuleInstantiation root_inst("group"); - - root_module = parsefile(filename); - if (!root_module) { - exit(1); - } - - if (fs::path(filename).has_parent_path()) { - fs::current_path(fs::path(filename).parent_path()); - } - - AbstractNode::resetIndexCounter(); - AbstractNode *absolute_root_node = root_module->instantiate(&top_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); - - current_path(original_path); - if (!N.isNull()) { - std::ofstream outfile; - outfile.open(outfilename); - - if (N.dim != 3) { - outfile << "Error: Current top level object is not a 3D object.\n"; - retval = 2; - } - else if (!N.p3->is_simple()) { - outfile << "Error: Object isn't a valid 2-manifold! Modify your design.\n"; - retval = 2; - } - else { - std::stringstream out; - export_stl(&N, out); - 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; -} |