diff options
| author | Marius Kintel <marius@kintel.net> | 2012-02-04 00:43:53 (GMT) | 
|---|---|---|
| committer | Marius Kintel <marius@kintel.net> | 2012-02-15 00:32:37 (GMT) | 
| commit | b9d218e13760f21be5aa94c15631d63b29439e18 (patch) | |
| tree | f01d1e16766b5af06939aa531e84b40bcf6f2f31 /tests | |
| parent | 44ff85399011ea1bd3eb812ce97d312ccc4f32eb (diff) | |
Initial implementation of ModuleCache and dependency tracking of used modules
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | tests/modulecachetest.cc | 121 | ||||
| -rw-r--r-- | tests/tests-common.cc | 7 | ||||
| -rw-r--r-- | tests/tests-common.h | 2 | 
4 files changed, 134 insertions, 3 deletions
| diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b81ce8c..fa75776 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -309,6 +309,7 @@ set(CORE_SOURCES    ../src/expr.cc     ../src/func.cc     ../src/module.cc  +  ../src/ModuleCache.cc     ../src/node.cc     ../src/context.cc     ../src/csgterm.cc  @@ -403,6 +404,12 @@ add_executable(dumptest dumptest.cc)  target_link_libraries(dumptest tests-common tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES})  # +# modulecachetest +# +add_executable(modulecachetest modulecachetest.cc) +target_link_libraries(modulecachetest tests-common tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) + +#  # csgtexttest  #  add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) diff --git a/tests/modulecachetest.cc b/tests/modulecachetest.cc new file mode 100644 index 0000000..ae872e2 --- /dev/null +++ b/tests/modulecachetest.cc @@ -0,0 +1,121 @@ +/* + *  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 "context.h" +#include "value.h" +#include "export.h" +#include "builtin.h" +#include "Tree.h" + +#include <QCoreApplication> +#ifndef _MSC_VER +#include <getopt.h> +#endif +#include <assert.h> +#include <iostream> +#include <sstream> +#include <fstream> + +#include <boost/filesystem.hpp> +namespace fs = boost::filesystem; +#include "boosty.h" + +std::string commandline_commands; +std::string currentdir; +QString examplesdir; + +using std::string; + +int main(int argc, char **argv) +{ +#ifdef _MSC_VER +  _set_output_format(_TWO_DIGIT_EXPONENT); +#endif +	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]; + +	int rc = 0; + +	Builtins::instance()->initialize(); + +	QCoreApplication app(argc, argv); +	fs::path original_path = fs::current_path(); + +	currentdir = boosty::stringy( fs::current_path() ); + +	parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); +	set_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); + +	Context root_ctx; +	register_builtin(root_ctx); + +	AbstractModule *root_module; +	ModuleInstantiation root_inst; +	AbstractNode *root_node; + +	root_module = parsefile(filename); +	if (!root_module) { +		fprintf(stderr, "Error: Unable to parse input file\n"); +		exit(1); +	} + +	fs::current_path(fs::path(filename).parent_path()); + +	AbstractNode::resetIndexCounter(); +	root_node = root_module->evaluate(&root_ctx, &root_inst); + +	delete root_node; +	delete root_module; + +	fs::current_path(original_path); + +	fprintf(stderr, "Second parse\n"); +	root_module = parsefile(filename); +	if (!root_module) { +		fprintf(stderr, "Error: Unable to parse second time\n"); +		exit(1); +	} + +	AbstractNode::resetIndexCounter(); +	root_node = root_module->evaluate(&root_ctx, &root_inst); + +	delete root_node; +	delete root_module; + +	Builtins::instance(true); + +	return rc; +} diff --git a/tests/tests-common.cc b/tests/tests-common.cc index 1694a74..5b0cc3b 100644 --- a/tests/tests-common.cc +++ b/tests/tests-common.cc @@ -7,9 +7,9 @@  #include <QFileInfo>  #include <sstream> -AbstractModule *parsefile(const char *filename) +Module *parsefile(const char *filename)  { -	AbstractModule *root_module = NULL; +	Module *root_module = NULL;  	QFileInfo fileInfo(filename);  	handle_dep(filename); @@ -27,6 +27,9 @@ AbstractModule *parsefile(const char *filename)  		fclose(fp);  		text << "\n" << commandline_commands;  		root_module = parse(text.str().c_str(), fileInfo.absolutePath().toLocal8Bit(), false); +		if (root_module) { +			root_module->handleDependencies(); +		}  	}  	return root_module;  } diff --git a/tests/tests-common.h b/tests/tests-common.h index 92ebc78..0047562 100644 --- a/tests/tests-common.h +++ b/tests/tests-common.h @@ -1,6 +1,6 @@  #ifndef TESTS_COMMON_H_  #define TESTS_COMMON_H_ -class AbstractModule *parsefile(const char *filename); +class Module *parsefile(const char *filename);  #endif | 
