From fd733201b82f39655488a286c89142f321ef9dc9 Mon Sep 17 00:00:00 2001 From: Sylvain Chiron Date: Sat, 1 Jul 2017 13:36:41 +0200 Subject: Updated libs from the Adaptagrams project: libavoid, libcola and libvspc; changed the code to match the new API Signed-off-by: Sylvain Chiron --- src/libvpsc/tests/cycle.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/libvpsc/tests/cycle.cpp (limited to 'src/libvpsc/tests/cycle.cpp') diff --git a/src/libvpsc/tests/cycle.cpp b/src/libvpsc/tests/cycle.cpp new file mode 100644 index 000000000..26dda3a0c --- /dev/null +++ b/src/libvpsc/tests/cycle.cpp @@ -0,0 +1,106 @@ +/* + * vim: ts=4 sw=4 et tw=0 wm=0 + * + * libvpsc - A solver for the problem of Variable Placement with + * Separation Constraints. + * + * Copyright (C) 2005-2008 Monash University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library in the file LICENSE; if not, + * write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +using namespace vpsc; +inline bool approxEquals(const double a, const double b) { + return fabs((double)a-b)<0.0001; +} +void test1() { + cout << "Test 1..." << endl; + vector a; + a.push_back(new Variable(0,0,1)); + a.push_back(new Variable(1,1,1)); + vector c; + c.push_back(new Constraint(a[0],a[1],2)); + c.push_back(new Constraint(a[1],a[0],2)); + double expected[]={1.5,-0.5}; + try { + IncSolver vpsc(a,c); + vpsc.solve(); + } catch (UnsatisfiableException& e) { + cerr << "Unsatisfiable" << endl; + for(vector::iterator i=e.path.begin(); + i!=e.path.end();i++) { + cout << **i << endl; + } + exit(1); + } + //catch(...) { + //cerr << "Unknown error!" << endl; + //exit(1); + //} + + for(size_t i=0;ifinalPosition,expected[i])); + } + for_each(a.begin(),a.end(),delete_object()); + for_each(c.begin(),c.end(),delete_object()); + cout << "Test 1... done." << endl; +} +void test2() { + cout << "Test 2..." << endl; + vector a; + a.push_back(new Variable(0,8,1)); + a.push_back(new Variable(1,5,1)); + a.push_back(new Variable(2,3,1)); + a.push_back(new Variable(3,1,1)); + vector c; + c.push_back(new Constraint(a[0],a[3],3)); + c.push_back(new Constraint(a[0],a[1],3)); + c.push_back(new Constraint(a[1],a[3],3)); + c.push_back(new Constraint(a[1],a[2],3)); + c.push_back(new Constraint(a[2],a[3],3)); + c.push_back(new Constraint(a[2],a[3],3)); + //double expected[]={-3.71429,4,1,-0.714286,2.28571,2.28571,7,5.28571,8.28571,11.2857}; + try { + IncSolver vpsc(a,c); + vpsc.solve(); + } catch (char const *msg) { + cerr << msg << endl; + exit(1); + } + + /* + for(int i=0;iposition(),expected[i])); + } + */ + cout << "Test 2... done." << endl; + for_each(a.begin(),a.end(),delete_object()); + for_each(c.begin(),c.end(),delete_object()); +} +int main() { + test1(); + return 0; +} -- cgit v1.2.3