dlvhex
2.5.0
|
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 #ifdef HAVE_CONFIG_H 00032 #include "config.h" 00033 #endif // HAVE_CONFIG_H 00034 00035 #include <iostream> 00036 #include <set> 00037 #include <list> 00038 #include <string> 00039 #include <vector> 00040 #include <cassert> 00041 00042 #include <boost/foreach.hpp> 00043 //#include <boost/type_traits/remove_const.hpp> 00044 #include <boost/graph/graph_traits.hpp> 00045 #include <boost/graph/adjacency_list.hpp> 00046 #include <boost/property_map/vector_property_map.hpp> 00047 #include <boost/concept/assert.hpp> 00048 #include <boost/concept_check.hpp> 00049 #define BOOST_TEST_MODULE __FILE__ 00050 #include <boost/test/unit_test.hpp> 00051 00052 #include "dlvhex2/Logger.h" 00053 #include "dlvhex2/EvalGraph.h" 00054 #include "dlvhex2/ModelGraph.h" 00055 #include "dlvhex2/ModelGenerator.h" 00056 #include "dlvhex2/OnlineModelBuilder.h" 00057 00058 #include "fixtureOnlineMB.h" 00059 00060 LOG_INIT(Logger::ERROR | Logger::WARNING) 00061 00062 #if 1 00063 #define DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00064 #define DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00065 #warning reactivate the else below if getSuccessorIntersection works! 00066 #else 00067 #define DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN \ 00068 CounterVerification<TestEvalGraph> cverification(omb.getEvalGraph(), 2); \ 00069 std::vector<unsigned> modelcounts(2,unsigned(0)); \ 00070 std::vector<unsigned> modeldepcounts(2,unsigned(0)); \ 00071 for(unsigned iteration = 1; iteration <= 2; ++iteration) \ 00072 { LOG("test iteration " << iteration); 00073 00074 #define DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END \ 00075 omb.printEvalGraphModelGraph(std::cerr); \ 00076 cverification.recordCounters(iteration); \ 00077 modelcounts[iteration-1] = omb.getModelGraph().countModels(); \ 00078 modeldepcounts[iteration-1] = omb.getModelGraph().countModelDeps(); \ 00079 } \ 00080 cverification.printCounters(); \ 00081 cverification.verifyEqual(1, 2); \ 00082 LOG("model counters:"); \ 00083 for(unsigned iteration = 0; iteration < 2; ++iteration ) { \ 00084 LOG("iteration " << iteration << ": " << modelcounts[iteration] << " models, " << modeldepcounts[iteration] << " dependencies"); \ 00085 } \ 00086 BOOST_CHECK_EQUAL(modelcounts[0], modelcounts[1]); \ 00087 BOOST_CHECK_EQUAL(modeldepcounts[0], modeldepcounts[1]); 00088 #endif 00089 00090 BOOST_AUTO_TEST_SUITE(root_TestOnlineModelBuilder) 00091 00092 BOOST_FIXTURE_TEST_CASE(online_model_building_e1_ufinal_input, OnlineModelBuilderE1Fixture) 00093 { 00094 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00095 00096 BOOST_TEST_MESSAGE("requesting model #1"); 00097 OptionalModel mfull = omb.getNextIModel(ufinal); 00098 BOOST_REQUIRE(!!mfull); 00099 { 00100 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mfull.get()).interpretation); 00101 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 4U); 00102 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00103 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00104 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00105 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(b)"), 1); 00106 } 00107 00108 BOOST_TEST_MESSAGE("requesting model #2"); 00109 OptionalModel nfm = omb.getNextIModel(ufinal); 00110 BOOST_REQUIRE(!nfm); 00111 00112 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00113 } 00114 00115 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u2_input, OnlineModelBuilderE2Fixture) 00116 { 00117 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00118 00119 BOOST_TEST_MESSAGE("requesting model #1"); 00120 OptionalModel m3 = omb.getNextIModel(u2); 00121 BOOST_REQUIRE(!!m3); 00122 { 00123 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m3.get()).interpretation); 00124 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00125 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(a)"), 1); 00126 } 00127 00128 BOOST_TEST_MESSAGE("requesting model #2"); 00129 OptionalModel m4 = omb.getNextIModel(u2); 00130 BOOST_REQUIRE(!!m4); 00131 { 00132 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m4.get()).interpretation); 00133 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00134 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(b)"), 1); 00135 } 00136 00137 BOOST_TEST_MESSAGE("requesting model #3"); 00138 OptionalModel nfm = omb.getNextIModel(u2); 00139 BOOST_REQUIRE(!nfm); 00140 00141 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00142 } 00143 00144 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u3_input, OnlineModelBuilderE2Fixture) 00145 { 00146 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00147 00148 BOOST_TEST_MESSAGE("requesting model #1"); 00149 OptionalModel m6 = omb.getNextIModel(u3); 00150 BOOST_REQUIRE(!!m6); 00151 { 00152 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m6.get()).interpretation); 00153 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00154 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(a)"), 1); 00155 } 00156 00157 BOOST_TEST_MESSAGE("requesting model #2"); 00158 OptionalModel m7 = omb.getNextIModel(u3); 00159 BOOST_REQUIRE(!!m7); 00160 { 00161 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m7.get()).interpretation); 00162 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00163 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(b)"), 1); 00164 } 00165 00166 BOOST_TEST_MESSAGE("requesting model #3"); 00167 OptionalModel nfm = omb.getNextIModel(u3); 00168 BOOST_REQUIRE(!nfm); 00169 00170 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00171 } 00172 00173 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u2_output, OnlineModelBuilderE2Fixture) 00174 { 00175 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00176 00177 BOOST_TEST_MESSAGE("requesting model #1"); 00178 OptionalModel m5 = omb.getNextOModel(u2); 00179 BOOST_REQUIRE(!!m5); 00180 { 00181 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m5.get()).interpretation); 00182 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00183 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(p,time)"), 1); 00184 } 00185 00186 BOOST_TEST_MESSAGE("requesting model #2"); 00187 OptionalModel nfm = omb.getNextOModel(u2); 00188 BOOST_REQUIRE(!nfm); 00189 00190 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00191 } 00192 00193 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u3_output, OnlineModelBuilderE2Fixture) 00194 { 00195 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00196 00197 BOOST_TEST_MESSAGE("requesting model #1"); 00198 OptionalModel m8 = omb.getNextOModel(u3); 00199 BOOST_REQUIRE(!!m8); 00200 { 00201 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m8.get()).interpretation); 00202 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00203 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(c)"), 1); 00204 } 00205 00206 BOOST_TEST_MESSAGE("requesting model #2"); 00207 OptionalModel m9 = omb.getNextOModel(u3); 00208 BOOST_REQUIRE(!!m9); 00209 { 00210 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m9.get()).interpretation); 00211 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00212 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(d)"), 1); 00213 } 00214 00215 BOOST_TEST_MESSAGE("requesting model #3"); 00216 OptionalModel m10 = omb.getNextOModel(u3); 00217 BOOST_REQUIRE(!!m10); 00218 { 00219 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m10.get()).interpretation); 00220 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00221 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00222 } 00223 00224 BOOST_TEST_MESSAGE("requesting model #4"); 00225 OptionalModel m11 = omb.getNextOModel(u3); 00226 BOOST_REQUIRE(!!m11); 00227 { 00228 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m11.get()).interpretation); 00229 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00230 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(f)"), 1); 00231 } 00232 00233 BOOST_TEST_MESSAGE("requesting model #5"); 00234 OptionalModel nfm = omb.getNextOModel(u3); 00235 BOOST_REQUIRE(!nfm); 00236 00237 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00238 } 00239 00240 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u4_input, OnlineModelBuilderE2Fixture) 00241 { 00242 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00243 00244 omb.printEvalGraphModelGraph(std::cerr); 00245 BOOST_TEST_MESSAGE("requesting model #1"); 00246 OptionalModel m12 = omb.getNextIModel(u4); 00247 omb.printEvalGraphModelGraph(std::cerr); 00248 BOOST_REQUIRE(!!m12); 00249 { 00250 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m12.get()).interpretation); 00251 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 2U); 00252 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(p,time)"), 1); 00253 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00254 } 00255 00256 BOOST_TEST_MESSAGE("requesting model #2"); 00257 OptionalModel m13 = omb.getNextIModel(u4); 00258 omb.printEvalGraphModelGraph(std::cerr); 00259 BOOST_REQUIRE(!!m13); 00260 { 00261 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m13.get()).interpretation); 00262 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 2U); 00263 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(p,time)"), 1); 00264 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(f)"), 1); 00265 } 00266 00267 BOOST_TEST_MESSAGE("requesting model #3"); 00268 OptionalModel nfm = omb.getNextIModel(u4); 00269 omb.printEvalGraphModelGraph(std::cerr); 00270 BOOST_REQUIRE(!nfm); 00271 00272 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00273 } 00274 00275 BOOST_FIXTURE_TEST_CASE(online_model_building_e2mirrored_u4_input, OnlineModelBuilderE2MirroredFixture) 00276 { 00277 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00278 00279 omb.printEvalGraphModelGraph(std::cerr); 00280 BOOST_TEST_MESSAGE("requesting model #1"); 00281 OptionalModel m12 = omb.getNextIModel(u4); 00282 omb.printEvalGraphModelGraph(std::cerr); 00283 BOOST_REQUIRE(!!m12); 00284 { 00285 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m12.get()).interpretation); 00286 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 2U); 00287 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(p,time)"), 1); 00288 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00289 } 00290 00291 BOOST_TEST_MESSAGE("requesting model #2"); 00292 OptionalModel m13 = omb.getNextIModel(u4); 00293 omb.printEvalGraphModelGraph(std::cerr); 00294 BOOST_REQUIRE(!!m13); 00295 { 00296 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m13.get()).interpretation); 00297 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 2U); 00298 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(p,time)"), 1); 00299 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(f)"), 1); 00300 } 00301 00302 BOOST_TEST_MESSAGE("requesting model #3"); 00303 OptionalModel nfm = omb.getNextIModel(u4); 00304 omb.printEvalGraphModelGraph(std::cerr); 00305 BOOST_REQUIRE(!nfm); 00306 00307 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00308 } 00309 00310 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_u4_output, OnlineModelBuilderE2Fixture) 00311 { 00312 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00313 00314 omb.printEvalGraphModelGraph(std::cerr); 00315 BOOST_TEST_MESSAGE("requesting model #1"); 00316 OptionalModel m14 = omb.getNextOModel(u4); 00317 omb.printEvalGraphModelGraph(std::cerr); 00318 BOOST_REQUIRE(!!m14); 00319 { 00320 TestInterpretation& ti = *(omb.getModelGraph().propsOf(m14.get()).interpretation); 00321 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 1U); 00322 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00323 } 00324 00325 BOOST_TEST_MESSAGE("requesting model #2"); 00326 OptionalModel nfm = omb.getNextOModel(u4); 00327 omb.printEvalGraphModelGraph(std::cerr); 00328 BOOST_REQUIRE(!nfm); 00329 00330 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00331 } 00332 00333 BOOST_FIXTURE_TEST_CASE(online_model_building_e2_ufinal_input, OnlineModelBuilderE2Fixture) 00334 { 00335 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00336 00337 omb.printEvalGraphModelGraph(std::cerr); 00338 BOOST_TEST_MESSAGE("requesting model #1"); 00339 OptionalModel mcomplete = omb.getNextIModel(ufinal); 00340 omb.printEvalGraphModelGraph(std::cerr); 00341 BOOST_REQUIRE(!!mcomplete); 00342 { 00343 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete.get()).interpretation); 00344 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 4U); 00345 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00346 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00347 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00348 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(b)"), 1); 00349 } 00350 00351 BOOST_TEST_MESSAGE("requesting model #2"); 00352 OptionalModel nfm = omb.getNextIModel(ufinal); 00353 omb.printEvalGraphModelGraph(std::cerr); 00354 BOOST_REQUIRE(!nfm); 00355 00356 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00357 } 00358 00359 BOOST_FIXTURE_TEST_CASE(online_model_building_e2mirrored_ufinal_input, OnlineModelBuilderE2MirroredFixture) 00360 { 00361 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00362 00363 omb.printEvalGraphModelGraph(std::cerr); 00364 BOOST_TEST_MESSAGE("requesting model #1"); 00365 OptionalModel mcomplete = omb.getNextIModel(ufinal); 00366 omb.printEvalGraphModelGraph(std::cerr); 00367 BOOST_REQUIRE(!!mcomplete); 00368 { 00369 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete.get()).interpretation); 00370 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 4U); 00371 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00372 BOOST_CHECK_EQUAL(ti.getAtoms().count("need(u,time)"), 1); 00373 BOOST_CHECK_EQUAL(ti.getAtoms().count("use(e)"), 1); 00374 BOOST_CHECK_EQUAL(ti.getAtoms().count("plan(b)"), 1); 00375 } 00376 00377 BOOST_TEST_MESSAGE("requesting model #2"); 00378 OptionalModel nfm = omb.getNextIModel(ufinal); 00379 omb.printEvalGraphModelGraph(std::cerr); 00380 BOOST_REQUIRE(!nfm); 00381 00382 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00383 } 00384 00385 BOOST_FIXTURE_TEST_CASE(online_model_building_ex1_ufinal_input, OnlineModelBuilderEx1Fixture) 00386 { 00387 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_BEGIN 00388 00389 BOOST_TEST_MESSAGE("requesting model #1"); 00390 OptionalModel mcomplete1 = omb.getNextIModel(ufinal); 00391 omb.printEvalGraphModelGraph(std::cerr); 00392 BOOST_REQUIRE(!!mcomplete1); 00393 { 00394 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete1.get()).interpretation); 00395 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 4U); 00396 BOOST_CHECK_EQUAL(ti.getAtoms().count("a"), 1); 00397 BOOST_CHECK_EQUAL(ti.getAtoms().count("c"), 1); 00398 BOOST_CHECK_EQUAL(ti.getAtoms().count("l"), 1); 00399 BOOST_CHECK_EQUAL(ti.getAtoms().count("m"), 1); 00400 } 00401 00402 BOOST_TEST_MESSAGE("requesting model #2"); 00403 OptionalModel mcomplete2 = omb.getNextIModel(ufinal); 00404 omb.printEvalGraphModelGraph(std::cerr); 00405 BOOST_REQUIRE(!!mcomplete2); 00406 { 00407 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete2.get()).interpretation); 00408 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 4U); 00409 BOOST_CHECK_EQUAL(ti.getAtoms().count("a"), 1); 00410 BOOST_CHECK_EQUAL(ti.getAtoms().count("c"), 1); 00411 BOOST_CHECK_EQUAL(ti.getAtoms().count("l"), 1); 00412 BOOST_CHECK_EQUAL(ti.getAtoms().count("n"), 1); 00413 } 00414 00415 BOOST_TEST_MESSAGE("requesting model #3"); 00416 OptionalModel mcomplete3 = omb.getNextIModel(ufinal); 00417 omb.printEvalGraphModelGraph(std::cerr); 00418 BOOST_REQUIRE(!!mcomplete3); 00419 { 00420 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete3.get()).interpretation); 00421 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 5U); 00422 BOOST_CHECK_EQUAL(ti.getAtoms().count("a"), 1); 00423 BOOST_CHECK_EQUAL(ti.getAtoms().count("d"), 1); 00424 BOOST_CHECK_EQUAL(ti.getAtoms().count("j"), 1); 00425 BOOST_CHECK_EQUAL(ti.getAtoms().count("l"), 1); 00426 BOOST_CHECK_EQUAL(ti.getAtoms().count("m"), 1); 00427 } 00428 00429 BOOST_TEST_MESSAGE("requesting model #4"); 00430 OptionalModel mcomplete4 = omb.getNextIModel(ufinal); 00431 omb.printEvalGraphModelGraph(std::cerr); 00432 BOOST_REQUIRE(!!mcomplete4); 00433 { 00434 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete4.get()).interpretation); 00435 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 5U); 00436 BOOST_CHECK_EQUAL(ti.getAtoms().count("a"), 1); 00437 BOOST_CHECK_EQUAL(ti.getAtoms().count("d"), 1); 00438 BOOST_CHECK_EQUAL(ti.getAtoms().count("j"), 1); 00439 BOOST_CHECK_EQUAL(ti.getAtoms().count("l"), 1); 00440 BOOST_CHECK_EQUAL(ti.getAtoms().count("n"), 1); 00441 } 00442 00443 BOOST_TEST_MESSAGE("requesting model #5"); 00444 OptionalModel mcomplete5 = omb.getNextIModel(ufinal); 00445 omb.printEvalGraphModelGraph(std::cerr); 00446 BOOST_REQUIRE(!!mcomplete5); 00447 { 00448 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete5.get()).interpretation); 00449 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 9U); 00450 BOOST_CHECK_EQUAL(ti.getAtoms().count("b"), 1); 00451 BOOST_CHECK_EQUAL(ti.getAtoms().count("d"), 1); 00452 BOOST_CHECK_EQUAL(ti.getAtoms().count("m"), 1); 00453 BOOST_CHECK_EQUAL(ti.getAtoms().count("f"), 1); 00454 BOOST_CHECK_EQUAL(ti.getAtoms().count("h"), 1); 00455 BOOST_CHECK_EQUAL(ti.getAtoms().count("i"), 1); 00456 BOOST_CHECK_EQUAL(ti.getAtoms().count("j"), 1); 00457 BOOST_CHECK_EQUAL(ti.getAtoms().count("k"), 1); 00458 BOOST_CHECK_EQUAL(ti.getAtoms().count("o"), 1); 00459 } 00460 00461 BOOST_TEST_MESSAGE("requesting model #6"); 00462 OptionalModel mcomplete6 = omb.getNextIModel(ufinal); 00463 omb.printEvalGraphModelGraph(std::cerr); 00464 BOOST_REQUIRE(!!mcomplete6); 00465 { 00466 TestInterpretation& ti = *(omb.getModelGraph().propsOf(mcomplete6.get()).interpretation); 00467 BOOST_CHECK_EQUAL(ti.getAtoms().size(), 8U); 00468 BOOST_CHECK_EQUAL(ti.getAtoms().count("b"), 1); 00469 BOOST_CHECK_EQUAL(ti.getAtoms().count("d"), 1); 00470 BOOST_CHECK_EQUAL(ti.getAtoms().count("n"), 1); 00471 BOOST_CHECK_EQUAL(ti.getAtoms().count("f"), 1); 00472 BOOST_CHECK_EQUAL(ti.getAtoms().count("h"), 1); 00473 BOOST_CHECK_EQUAL(ti.getAtoms().count("i"), 1); 00474 BOOST_CHECK_EQUAL(ti.getAtoms().count("j"), 1); 00475 BOOST_CHECK_EQUAL(ti.getAtoms().count("k"), 1); 00476 } 00477 00478 BOOST_TEST_MESSAGE("requesting model #7"); 00479 OptionalModel nfm = omb.getNextIModel(ufinal); 00480 omb.printEvalGraphModelGraph(std::cerr); 00481 BOOST_REQUIRE(!nfm); 00482 00483 DO_MODEL_GENERATION_TWICE_CHECK_GENERATORCOUNT_END 00484 } 00485 00486 BOOST_AUTO_TEST_SUITE_END()