dlvhex  2.5.0
testsuite/fixtureOfflineMB.h
Go to the documentation of this file.
00001 /* dlvhex -- Answer-Set Programming with external interfaces.
00002  * Copyright (C) 2005, 2006, 2007 Roman Schindlauer
00003  * Copyright (C) 2006, 2007, 2008, 2009, 2010 Thomas Krennwallner
00004  * Copyright (C) 2009, 2010 Peter Schüller
00005  * 
00006  * This file is part of dlvhex.
00007  *
00008  * dlvhex is free software; you can redistribute it and/or modify it
00009  * under the terms of the GNU Lesser General Public License as
00010  * published by the Free Software Foundation; either version 2.1 of
00011  * the License, or (at your option) any later version.
00012  *
00013  * dlvhex is distributed in the hope that it will be useful, but
00014  * WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016  * Lesser General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU Lesser General Public
00019  * License along with dlvhex; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
00021  * 02110-1301 USA.
00022  */
00023 
00031 #ifndef FIXTUREOFFLINEMB_HPP_INCLUDED__24092010
00032 #define FIXTUREOFFLINEMB_HPP_INCLUDED__24092010
00033 
00034 #include "fixtureE1.h"
00035 #include "fixtureE2.h"
00036 #include "fixtureEx1.h"
00037 
00038 #include "dlvhex2/OfflineModelBuilder.h"
00039 #include "dlvhex2/Logger.h"
00040 
00041 #include <boost/test/unit_test.hpp>
00042 
00043 // fixture for testing offline model building with various graphs
00044 // we setup model generator factories
00045 template<typename EvalGraphBaseFixtureT>
00046 struct OfflineModelBuilderTFixture:
00047   public EvalGraphBaseFixtureT
00048 {
00049   typedef EvalGraphBaseFixtureT Base;
00050   typedef dlvhex::OfflineModelBuilder<TestEvalGraph> ModelBuilder;
00051   typedef ModelBuilder::OptionalModel OptionalModel;
00052 
00053   dlvhex::ModelBuilderConfig<TestEvalGraph> cfg;
00054   ModelBuilder omb;
00055   EvalUnit ufinal;
00056 
00057   OfflineModelBuilderTFixture():
00058     EvalGraphBaseFixtureT(),
00059     cfg(Base::eg),
00060     omb(cfg)
00061   {
00062     LOG_SCOPE(INFO,"OfflineModelBuilderTFixture<...>", true);
00063     typedef TestEvalUnitPropertyBase UnitCfg;
00064     typedef TestEvalGraph::EvalUnitDepPropertyBundle UnitDepCfg;
00065     TestEvalGraph& eg = Base::eg;
00066 
00067     // setup final unit
00068     BOOST_TEST_MESSAGE("adding ufinal");
00069     LOG(INFO,"ufinal = " << ufinal);
00070     ufinal = eg.addUnit(UnitCfg());
00071 
00072     TestEvalGraph::EvalUnitIterator it, itend;
00073     boost::tie(it, itend) = eg.getEvalUnits();
00074     for(; it != itend && *it != ufinal; ++it)
00075     {
00076       LOG(INFO,"setting up TestModelGeneratorFactory on unit " << *it);
00077       eg.propsOf(*it).mgf.reset( 
00078         new TestModelGeneratorFactory(eg.propsOf(*it).ctx));
00079 
00080       LOG(INFO,"adding dependency from ufinal to unit " << *it << " join order " << *it);
00081       // we can do this because we know that eval units (= vertices of a vecS adjacency list) are unsigned integers
00082       eg.addDependency(ufinal, *it, UnitDepCfg(*it));
00083     }
00084   }
00085 
00086   ~OfflineModelBuilderTFixture() {}
00087 };
00088 
00089 // create one E1 model building fixture
00090 typedef OfflineModelBuilderTFixture<EvalGraphE1Fixture>
00091   OfflineModelBuilderE1Fixture;
00092 
00093 // create one normal E2 model building fixture
00094 typedef OfflineModelBuilderTFixture<EvalGraphE2Fixture>
00095   OfflineModelBuilderE2Fixture;
00096 
00097 // create one E2 model building fixture with mirrored join order u2/u3
00098 typedef OfflineModelBuilderTFixture<EvalGraphE2MirroredFixture>
00099   OfflineModelBuilderE2MirroredFixture;
00100 
00101 // create one Ex1 model building fixture
00102 typedef OfflineModelBuilderTFixture<EvalGraphEx1Fixture>
00103   OfflineModelBuilderEx1Fixture;
00104 
00105 #endif // FIXTUREOFFLINEMB_HPP_INCLUDED__24092010