/**
*
* Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(_at_LIP6) & Christophe GONZALES(_at_AMU)
* info_at_agrum_dot_org
*
* 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 3 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. If not, see .
*
*/
#include
#include
#include
#include
#include
#include
#include
#include
// The graph used for the tests:
// 1 2_ 1 -> 3
// / \ / / 1 -> 4
// 3 4 / 3 -> 5
// \ / / 4 -> 5
// 5_/ 2 -> 4
// 2 -> 5
namespace gum_tests {
class BIFReaderTestSuite: public CxxTest::TestSuite {
public:
void testConstuctor() {
std::string file = GET_RESSOURCES_PATH("bif/BIFReader_file1.bif");
gum::BayesNet< double > net;
gum::BIFReader< double >* reader = 0;
TS_GUM_ASSERT_THROWS_NOTHING(reader = new gum::BIFReader< double >(&net, file));
TS_GUM_ASSERT_THROWS_NOTHING(delete reader);
}
void testRead_file1() {
std::string file = GET_RESSOURCES_PATH("bif/BIFReader_file1.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
reader.trace(false);
gum::Size nbrErr = 0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)2)
// 2 warnings : properties
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
TS_ASSERT_DIFFERS(net, nullptr)
if (net != nullptr) {
TS_ASSERT(net->empty())
delete net;
}
}
void testRead_file2_float() {
std::string file = GET_RESSOURCES_PATH("bif/BIFReader_file2.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)2)
// 2 warnings
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
TS_ASSERT_DIFFERS(net, nullptr)
if (net != nullptr) {
TS_ASSERT_EQUALS(net->size(), (gum::Size)2)
gum::NodeId node_1 = 0, node_2 = 0;
for (const auto node: net->nodes())
if (net->variable(node).name() == "n1")
node_1 = node;
else
node_2 = node;
const gum::DiscreteVariable& var_1 = net->variable(node_1);
TS_ASSERT_EQUALS(var_1.name(), "n1")
TS_ASSERT_EQUALS(var_1.domainSize(), (gum::Size)2)
const gum::Potential< double >& proba_1 = net->cpt(node_1);
TS_ASSERT_EQUALS(proba_1.domainSize(), (gum::Size)2)
gum::Instantiation inst_1(proba_1);
inst_1.setFirst();
TS_ASSERT(std::abs((proba_1[inst_1] - 0.2f)) < 0.001f)
inst_1.setLast();
TS_ASSERT(std::abs((proba_1[inst_1] - 0.8f)) < 0.001f)
const gum::DiscreteVariable& var_2 = net->variable(node_2);
TS_ASSERT_EQUALS(var_2.name(), "n2")
TS_ASSERT_EQUALS(var_2.domainSize(), (gum::Size)2)
const gum::Potential< double >& proba_2 = net->cpt(node_2);
TS_ASSERT_EQUALS(proba_2.domainSize(), (gum::Size)2)
gum::Instantiation inst_2(proba_2);
inst_2.setFirst();
TS_ASSERT(std::abs((proba_2[inst_2] - 0.3f)) < 0.001f)
inst_2.setLast();
TS_ASSERT(std::abs((proba_2[inst_2] - 0.7f)) < 0.001f)
delete net;
}
}
void testRead_file2_double() {
std::string file = GET_RESSOURCES_PATH("bif/BIFReader_file2.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)2)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
TS_ASSERT_DIFFERS(net, nullptr)
if (net != nullptr) {
TS_ASSERT_EQUALS(net->size(), (gum::Size)2)
gum::NodeId node_1 = 0, node_2 = 0;
for (const auto node: net->nodes())
if (net->variable(node).name() == "n1")
node_1 = node;
else
node_2 = node;
const gum::DiscreteVariable& var_1 = net->variable(node_1);
TS_ASSERT_EQUALS(var_1.name(), "n1")
TS_ASSERT_EQUALS(var_1.domainSize(), (gum::Size)2)
const gum::Potential< double >& proba_1 = net->cpt(node_1);
TS_ASSERT_EQUALS(proba_1.domainSize(), (gum::Size)2)
gum::Instantiation inst_1(proba_1);
inst_1.setFirst();
TS_ASSERT(std::abs((proba_1[inst_1] - 0.2)) < 0.001)
inst_1.setLast();
TS_ASSERT(std::abs((proba_1[inst_1] - 0.8)) < 0.001)
const gum::DiscreteVariable& var_2 = net->variable(node_2);
TS_ASSERT_EQUALS(var_2.name(), "n2")
TS_ASSERT_EQUALS(var_2.domainSize(), (gum::Size)2)
const gum::Potential< double >& proba_2 = net->cpt(node_2);
TS_ASSERT_EQUALS(proba_2.domainSize(), (gum::Size)2)
gum::Instantiation inst_2(proba_2);
inst_2.setFirst();
TS_ASSERT(std::abs((proba_2[inst_2] - 0.3)) < 0.001)
inst_2.setLast();
TS_ASSERT(std::abs((proba_2[inst_2] - 0.7)) < 0.001)
delete net;
}
}
void testRead_file3() {
std::string file = GET_RESSOURCES_PATH("bif/BIFReader_file3.bif");
auto net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)3)
// 3 warnings
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
TS_ASSERT_DIFFERS(net, nullptr)
if (net != nullptr) {
gum::HashTable< std::string, gum::NodeId > idMap;
for (const auto node: net->nodes())
idMap.insert(net->variable(node).name(), node);
const gum::DiscreteVariable& var_1 = net->variable(idMap["n1"]);
TS_ASSERT_EQUALS(var_1.name(), "n1")
TS_ASSERT_EQUALS(var_1.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(var_1.label(0), "0")
TS_ASSERT_EQUALS(var_1.label(1), "1")
const gum::Potential< double >& proba_1 = net->cpt(idMap["n1"]);
TS_ASSERT_EQUALS(proba_1.domainSize(), (gum::Size)2)
gum::Instantiation inst_1(proba_1);
inst_1.setFirst();
TS_ASSERT_DELTA(proba_1[inst_1], 0.2f, 0.001f)
inst_1.setLast();
TS_ASSERT_DELTA(proba_1[inst_1], 0.8f, 0.001f)
const gum::DiscreteVariable& var_2 = net->variable(idMap["n2"]);
TS_ASSERT_EQUALS(var_2.name(), "n2")
TS_ASSERT_EQUALS(var_2.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(var_2.label(0), "foo")
TS_ASSERT_EQUALS(var_2.label(1), "bar")
const gum::Potential< double >& proba_2 = net->cpt(idMap["n2"]);
TS_ASSERT_EQUALS(proba_2.domainSize(), (gum::Size)2)
gum::Instantiation inst_2(proba_2);
inst_2.setFirst();
TS_ASSERT_DELTA(proba_2[inst_2], 0.3f, 0.001f)
inst_2.setLast();
TS_ASSERT_DELTA(proba_2[inst_2], 0.7f, 0.001f)
const gum::DiscreteVariable& var_3 = net->variable(idMap["n3"]);
TS_ASSERT_EQUALS(var_3.name(), "n3")
TS_ASSERT_EQUALS(var_3.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(var_3.label(0), "0")
TS_ASSERT_EQUALS(var_3.label(1), "1")
TS_ASSERT(net->dag().existsArc(idMap["n1"], idMap["n3"]))
const gum::Potential< double >& proba_3 = net->cpt(idMap["n3"]);
TS_ASSERT_EQUALS(proba_3.domainSize(), (gum::Size)4)
gum::Instantiation inst_3(proba_3);
inst_3.chgVal(var_1, 0);
inst_3.chgVal(var_3, 0);
TS_ASSERT_DELTA(proba_3[inst_3], 0.1f, 0.001f)
inst_3.chgVal(var_3, 1);
TS_ASSERT_DELTA(proba_3[inst_3], 0.9f, 0.001f)
inst_3.chgVal(var_1, 1);
inst_3.chgVal(var_3, 0);
TS_ASSERT_DELTA(proba_3[inst_3], 0.9f, 0.001f)
inst_3.chgVal(var_3, 1);
TS_ASSERT_DELTA(proba_3[inst_3], 0.1f, 0.001f)
const gum::DiscreteVariable& var_4 = net->variable(idMap["n4"]);
TS_ASSERT_EQUALS(var_4.name(), "n4")
TS_ASSERT_EQUALS(var_4.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(var_4.label(0), "0")
TS_ASSERT_EQUALS(var_4.label(1), "1")
TS_ASSERT(net->dag().existsArc(idMap["n1"], idMap["n4"]))
TS_ASSERT(net->dag().existsArc(idMap["n2"], idMap["n4"]))
const gum::Potential< double >& proba_4 = net->cpt(idMap["n4"]);
TS_ASSERT_EQUALS(proba_4.domainSize(), (gum::Size)8)
gum::Instantiation inst_4(proba_4);
inst_4.chgVal(var_1, 0);
inst_4.chgVal(var_2, 0);
inst_4.chgVal(var_4, 0);
TS_ASSERT_DELTA(proba_4[inst_4], 0.4f, 0.001f)
inst_4.chgVal(var_4, 1);
TS_ASSERT_DELTA(proba_4[inst_4], 0.6f, 0.001f)
inst_4.chgVal(var_1, 1);
inst_4.chgVal(var_2, 0);
inst_4.chgVal(var_4, 0);
TS_ASSERT_DELTA(proba_4[inst_4], 0.5f, 0.001f)
inst_4.chgVal(var_4, 1);
TS_ASSERT_DELTA(proba_4[inst_4], 0.5f, 0.001f)
inst_4.chgVal(var_1, 0);
inst_4.chgVal(var_2, 1);
inst_4.chgVal(var_4, 0);
TS_ASSERT_DELTA(proba_4[inst_4], 0.5f, 0.001f)
inst_4.chgVal(var_4, 1);
TS_ASSERT_DELTA(proba_4[inst_4], 0.5f, 0.001f)
inst_4.chgVal(var_1, 1);
inst_4.chgVal(var_2, 1);
inst_4.chgVal(var_4, 0);
TS_ASSERT_EQUALS(proba_4[inst_4], 1)
inst_4.chgVal(var_4, 1);
TS_ASSERT_EQUALS(proba_4[inst_4], 0)
const gum::DiscreteVariable& var_5 = net->variable(idMap["n5"]);
TS_ASSERT_EQUALS(var_5.name(), "n5")
TS_ASSERT_EQUALS(var_5.domainSize(), (gum::Size)3)
TS_ASSERT_EQUALS(var_5.label(0), "space")
TS_ASSERT_EQUALS(var_5.label(1), "final")
TS_ASSERT_EQUALS(var_5.label(2), "frontiere")
TS_ASSERT(net->dag().existsArc(idMap["n2"], idMap["n5"]))
TS_ASSERT(net->dag().existsArc(idMap["n3"], idMap["n5"]))
const gum::Potential< double >& proba_5 = net->cpt(idMap["n5"]);
TS_ASSERT_EQUALS(proba_5.domainSize(), (gum::Size)12)
gum::Instantiation inst_5(proba_5);
inst_5.chgVal(var_3, 0);
inst_5.chgVal(var_2, 0);
inst_5.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_5[inst_5], 0.3f, 0.001f)
inst_5.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_5[inst_5], 0.6f, 0.001f)
inst_5.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_5[inst_5], 0.1f, 0.001f)
inst_5.chgVal(var_2, 0);
inst_5.chgVal(var_3, 1);
inst_5.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_5[inst_5], 0.5f, 0.001f)
inst_5.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_5[inst_5], 0.5f, 0.001f)
inst_5.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_5[inst_5], 0.0f, 0.001f)
inst_5.chgVal(var_2, 1);
inst_5.chgVal(var_3, 0);
inst_5.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_5[inst_5], 0.4f, 0.001f)
inst_5.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_5[inst_5], 0.6f, 0.001f)
inst_5.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_5[inst_5], 0.0f, 0.001f)
inst_5.chgVal(var_2, 1);
inst_5.chgVal(var_3, 1);
inst_5.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_5[inst_5], 0.5f, 0.001f)
inst_5.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_5[inst_5], 0.5f, 0.001f)
inst_5.chgVal(var_5, 2);
TS_ASSERT_EQUALS(proba_5[inst_5], 0)
const gum::DiscreteVariable& var_6 = net->variable(idMap["n6"]);
TS_ASSERT_EQUALS(var_6.name(), "n6")
TS_ASSERT_EQUALS(var_6.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(var_6.label(0), "0")
TS_ASSERT_EQUALS(var_6.label(1), "1")
TS_ASSERT(net->dag().existsArc(idMap["n1"], idMap["n6"]))
TS_ASSERT(net->dag().existsArc(idMap["n5"], idMap["n6"]))
const gum::Potential< double >& proba_6 = net->cpt(idMap["n6"]);
TS_ASSERT_EQUALS(proba_6.domainSize(), (gum::Size)12)
gum::Instantiation inst_6(proba_6);
inst_6.chgVal(var_6, 0);
inst_6.chgVal(var_1, 0);
inst_6.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_6[inst_6], 0.1f, 0.001f)
inst_6.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_6[inst_6], 0.2f, 0.001f)
inst_6.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_6[inst_6], 0.3f, 0.001f)
inst_6.chgVal(var_1, 1);
inst_6.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_6[inst_6], 0.4f, 0.001f)
inst_6.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_6[inst_6], 0.5f, 0.001f)
inst_6.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_6[inst_6], 0.6f, 0.001f)
inst_6.chgVal(var_6, 1);
inst_6.chgVal(var_1, 0);
inst_6.chgVal(var_5, 0);
TS_ASSERT_DELTA(proba_6[inst_6], 0.7f, 0.001f)
inst_6.chgVal(var_5, 1);
TS_ASSERT_DELTA(proba_6[inst_6], 0.8f, 0.001f)
inst_6.chgVal(var_5, 2);
TS_ASSERT_DELTA(proba_6[inst_6], 0.9f, 0.001f)
inst_6.chgVal(var_1, 1);
inst_6.chgVal(var_5, 0);
TS_ASSERT_EQUALS(proba_6[inst_6], 1)
inst_6.chgVal(var_5, 1);
TS_ASSERT_EQUALS(proba_6[inst_6], 0)
inst_6.chgVal(var_5, 2);
TS_ASSERT_EQUALS(proba_6[inst_6], 0)
delete net;
}
}
void testAlarm() {
std::string file = GET_RESSOURCES_PATH("bif/alarm.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)0)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
gum::HashTable< std::string, gum::NodeId > idMap;
for (const auto node: net->nodes())
idMap.insert(net->variable(node).name(), node);
// The node wich we'll test
TS_ASSERT(idMap.exists("HISTORY"))
// It's parent
TS_ASSERT(idMap.exists("LVFAILURE"))
if (idMap.exists("HISTORY") && idMap.exists("LVFAILURE")) {
const gum::DiscreteVariable& history = net->variable(idMap["HISTORY"]);
TS_ASSERT_EQUALS(history.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(history.label(0), "TRUE")
TS_ASSERT_EQUALS(history.label(1), "FALSE")
TS_ASSERT(net->dag().existsArc(idMap["LVFAILURE"], idMap["HISTORY"]))
const gum::Potential< double >& historyCPT = net->cpt(idMap["HISTORY"]);
TS_ASSERT_EQUALS(historyCPT.domainSize(), (gum::Size)4)
TS_ASSERT(historyCPT.contains(net->variable(idMap["HISTORY"])))
TS_ASSERT(historyCPT.contains(net->variable(idMap["LVFAILURE"])))
gum::Instantiation historyInst(historyCPT);
// (TRUE | TRUE)
historyInst.chgVal(history, 0);
historyInst.chgVal(net->variable(idMap["LVFAILURE"]), 0);
TS_ASSERT(std::abs(historyCPT[historyInst] - 0.9f) < 0.0001f)
// (FALSE | TRUE)
historyInst.chgVal(history, 1);
historyInst.chgVal(net->variable(idMap["LVFAILURE"]), 0);
TS_ASSERT(std::abs(historyCPT[historyInst] - 0.1f) < 0.0001f)
// (TRUE | FALSE)
historyInst.chgVal(history, 0);
historyInst.chgVal(net->variable(idMap["LVFAILURE"]), 1);
TS_ASSERT(std::abs(historyCPT[historyInst] - 0.01f) < 0.0001f)
// (FALSE | FALSE)
historyInst.chgVal(history, 1);
historyInst.chgVal(net->variable(idMap["LVFAILURE"]), 1);
TS_ASSERT(std::abs(historyCPT[historyInst] - 0.99f) < 0.0001f)
}
// The node wich we'll test
TS_ASSERT(idMap.exists("ERRLOWOUTPUT"))
// It's Children
TS_ASSERT(idMap.exists("HRBP"))
if (idMap.exists("ERRLOWOUTPUT") && idMap.exists("HRBP")) {
const gum::DiscreteVariable& errlowoutput = net->variable(idMap["ERRLOWOUTPUT"]);
TS_ASSERT_EQUALS(errlowoutput.domainSize(), (gum::Size)2)
TS_ASSERT_EQUALS(errlowoutput.label(0), "TRUE")
TS_ASSERT_EQUALS(errlowoutput.label(1), "FALSE")
TS_ASSERT(net->dag().existsArc(idMap["ERRLOWOUTPUT"], idMap["HRBP"]))
const gum::Potential< double >& errlowoutputCPT = net->cpt(idMap["ERRLOWOUTPUT"]);
TS_ASSERT_EQUALS(errlowoutputCPT.domainSize(), (gum::Size)2)
TS_ASSERT(errlowoutputCPT.contains(errlowoutput))
gum::Instantiation errlowoutputInst(errlowoutputCPT);
errlowoutputInst.chgVal(errlowoutput, 0);
TS_ASSERT(std::abs(errlowoutputCPT[errlowoutputInst] - 0.05f) < 0.001f)
errlowoutputInst.chgVal(errlowoutput, 1);
TS_ASSERT(std::abs(errlowoutputCPT[errlowoutputInst] - 0.95f) < 0.001f)
}
// The nide wich we'll test
TS_ASSERT(idMap.exists("LVEDVOLUME"))
// It's parents
TS_ASSERT(idMap.exists("HYPOVOLEMIA"))
TS_ASSERT(idMap.exists("LVFAILURE"))
if (idMap.exists("LVEDVOLUME") && idMap.exists("HYPOVOLEMIA") && idMap.exists("LVFAILURE")) {
const gum::DiscreteVariable& lvedvolume = net->variable(idMap["LVEDVOLUME"]);
const gum::DiscreteVariable& hypovolemia = net->variable(idMap["HYPOVOLEMIA"]);
const gum::DiscreteVariable& lvfailure = net->variable(idMap["LVFAILURE"]);
// checking label order
TS_ASSERT_EQUALS(lvedvolume.label(0), "LOW")
TS_ASSERT_EQUALS(lvedvolume.label(1), "NORMAL")
TS_ASSERT_EQUALS(lvedvolume.label(2), "HIGH")
TS_ASSERT_EQUALS(hypovolemia.label(0), "TRUE")
TS_ASSERT_EQUALS(hypovolemia.label(1), "FALSE")
TS_ASSERT_EQUALS(lvfailure.label(0), "TRUE")
TS_ASSERT_EQUALS(lvfailure.label(1), "FALSE")
const gum::Potential< double >& cpt = net->cpt(idMap["LVEDVOLUME"]);
gum::Instantiation inst(cpt);
gum::Instantiation var_inst;
var_inst << lvedvolume;
inst.chgVal(hypovolemia, 0);
inst.chgVal(lvfailure, 0);
float array_1[] = {0.95f, 0.04f, 0.01f};
size_t i = 0;
for (inst.setFirstIn(var_inst); !inst.end(); inst.incIn(var_inst), ++i) {
TS_ASSERT_DELTA(cpt[inst], array_1[i], 0.001f)
}
inst.chgVal(hypovolemia, 1);
inst.chgVal(lvfailure, 0);
float array_2[] = {0.98f, 0.01f, 0.01f};
i = 0;
for (inst.setFirstIn(var_inst); !inst.end(); inst.incIn(var_inst), ++i) {
TS_ASSERT_DELTA(cpt[inst], array_2[i], 0.001f)
}
inst.chgVal(hypovolemia, 0);
inst.chgVal(lvfailure, 1);
float array_3[] = {0.01f, 0.09f, 0.9f};
i = 0;
for (inst.setFirstIn(var_inst); !inst.end(); inst.incIn(var_inst), ++i) {
TS_ASSERT_DELTA(cpt[inst], array_3[i], 0.001f)
}
inst.chgVal(hypovolemia, 1);
inst.chgVal(lvfailure, 1);
float array_4[] = {0.05f, 0.9f, 0.05f};
i = 0;
for (inst.setFirstIn(var_inst); !inst.end(); inst.incIn(var_inst), ++i) {
TS_ASSERT_DELTA(cpt[inst], array_4[i], 0.001f)
}
}
delete net;
}
void testUnexisting() {
std::string file = "Schmurtz";
gum::BayesNet< double >* net = new gum::BayesNet< double >();
TS_GUM_ASSERT_THROWS_NOTHING(gum::BIFReader< double > reader(net, file));
gum::BIFReader< double > reader(net, file);
TS_ASSERT_THROWS(reader.proceed(), gum::IOError)
if (net) delete net;
}
void testBarley() {
std::string file = GET_RESSOURCES_PATH("bif/Barley.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT(nbrErr > (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)96)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)107)
if (net) delete net;
}
void testCarpo() {
std::string file = GET_RESSOURCES_PATH("bif/carpo.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)361)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testDiabetes() {
std::string file = GET_RESSOURCES_PATH("bif/Diabetes.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)826)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testHailfinder() {
std::string file = GET_RESSOURCES_PATH("bif/hailfinder.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)0)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testInsurance() {
std::string file = GET_RESSOURCES_PATH("bif/insurance.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)0)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net != nullptr) delete net;
}
void testLink() {
std::string file = GET_RESSOURCES_PATH("bif/Link.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)724)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testMildew() {
std::string file = GET_RESSOURCES_PATH("bif/Mildew.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)70)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testMunin1() {
std::string file = GET_RESSOURCES_PATH("bif/Munin1.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)372)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void testPigs() {
std::string file = GET_RESSOURCES_PATH("bif/Pigs.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)441)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
void dBN_INRA_regression_testing() {
{
gum::BayesNet< double > net;
gum::BIFReader< double > reader(
&net,
std::string(GET_RESSOURCES_PATH("bif/dBN_with_errors.bif")));
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)3)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)3)
}
{
gum::BayesNet< double > net;
gum::BIFReader< double > reader(&net, std::string(GET_RESSOURCES_PATH("bif/dBN.bif")));
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)2)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
}
}
void testWater() {
std::string file = GET_RESSOURCES_PATH("bif/Water.bif");
gum::BayesNet< double >* net = new gum::BayesNet< double >();
gum::BIFReader< double > reader(net, file);
gum::Size nbrErr = (gum::Size)0;
TS_GUM_ASSERT_THROWS_NOTHING(nbrErr = reader.proceed());
TS_ASSERT_EQUALS(nbrErr, (gum::Size)0)
TS_ASSERT_EQUALS(reader.warnings(), (gum::Size)64)
TS_ASSERT_EQUALS(reader.errors(), (gum::Size)0)
if (net) delete net;
}
};
} // namespace gum_tests