C++ Library for Neural Networks — Use libneuron to design neural networks with back propagation and evolution.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.2 KiB

8 years ago
/** @id $Id$
This file has been added:
- by bootstrap.sh
- on Wed, 24 August 2016 16:36:14 +0200
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <neuron.hxx>
8 years ago
#include <cppunit/TestFixture.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/XmlOutputter.h>
#include <fstream>
/// @todo Rename DummyTest and DummyTest::dummy()
/// @todo Write test cases
class NeuroNetTest: public CppUnit::TestFixture {
8 years ago
public:
void simplexor() {
NeuroNet<float, 2, 1> neuronet;
Matrix<float, 1, 2> in[] = {{1, 1},
{1, -1},
{-1, 1},
{-1, -1}};
Matrix<float, 1, 1> out[] = {-1,
1,
1,
-1};
for (int step(0); step<10; ++step)
for (int i(0); i<sizeof(in)/sizeof(*in); ++i)
for (int rep(0); rep<10; ++rep)
auto res(neuronet.learn(in[i], out[i]));
for (int i(0); i<sizeof(in)/sizeof(*in); ++i) {
std::cout<<in[i]<<""<<out[i]<<" ~ "
<<neuronet(in[i]).apply([](float&v){
v = v<0 ? -1.0 : 1.0;
})<<std::endl;
auto res(neuronet(in[i])
.apply([](float&v){
std::cout<<"v="<<v<<std::endl;
v = v<0 ? -1.0 : 1.0;
}));
CPPUNIT_ASSERT_EQUAL(out[i], res);
}
8 years ago
}
CPPUNIT_TEST_SUITE(NeuroNetTest);
CPPUNIT_TEST(simplexor);
8 years ago
CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(NeuroNetTest);
8 years ago
int main(int argc, char** argv) try {
std::ofstream ofs((*argv+std::string(".xml")).c_str());
CppUnit::TextUi::TestRunner runner;
runner.setOutputter(new CppUnit::XmlOutputter(&runner.result(), ofs));
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
return runner.run() ? 0 : 1;
} catch (std::exception& e) {
std::cerr<<"***Exception: "<<e.what()<<std::endl;
return 1;
}