#include #include #include #include #include #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #include #pragma GCC diagnostic pop union SSE { __m128 sse; // SSE 4 x float vector float floats[4]; // scalar array of 4 floats }; NEURAL_NETWORK_INIT(); TEST(Heaviside, ParamOne) { NeuralNetwork::ActivationFunction::Heaviside h(1.0); ASSERT_EQ(h(0.2), 0); ASSERT_EQ(h(1.2), 1); } TEST(Heaviside, ParamZeroPointSeven) { NeuralNetwork::ActivationFunction::Heaviside h(0.7); ASSERT_EQ(h(0.2), 0); ASSERT_EQ(h(0.8), 1); } TEST(Sigmoid, ParamZeroPointSeven) { NeuralNetwork::ActivationFunction::Sigmoid s(0.7); ASSERT_GT(s(0.1), 0.482407); ASSERT_LT(s(0.1), 0.482607); ASSERT_GT(s(10), 0.000901051); ASSERT_LT(s(10), 0.000921051); } TEST(Sigmoid, ParamMinusFive) { NeuralNetwork::ActivationFunction::Sigmoid s(-5); ASSERT_GT(s(0.1), 0.622359); ASSERT_LT(s(0.1), 0.622559); ASSERT_GT(s(0.7), 0.970588); ASSERT_LT(s(0.7), 0.970788); } TEST(Linear, ParamOne) { NeuralNetwork::ActivationFunction::Linear s(1.0); ASSERT_GT(s(0.5), 0.4999); ASSERT_LT(s(0.5), 0.5001); ASSERT_EQ(s(0.0), 0.0); } TEST(Linear, ParamZeroPointSeven) { NeuralNetwork::ActivationFunction::Linear s(0.7); ASSERT_GT(s(1.0), 0.6999); ASSERT_LT(s(1.0), 0.7001); ASSERT_EQ(s(0.0), 0.0); } TEST(Linear, Serialize) { NeuralNetwork::ActivationFunction::Linear l(2.5); const std::string tmp = l.serialize().serialize(); NeuralNetwork::ActivationFunction::ActivationFunction* deserialized = NeuralNetwork::ActivationFunction::Factory::deserialize(l.serialize()).release(); ASSERT_EQ(tmp, deserialized->serialize().serialize()); delete deserialized; } TEST(Heaviside, Serialize) { NeuralNetwork::ActivationFunction::Heaviside l(2.5); const std::string tmp = l.serialize().serialize(); NeuralNetwork::ActivationFunction::ActivationFunction* deserialized = NeuralNetwork::ActivationFunction::Factory::deserialize(l.serialize()).release(); ASSERT_EQ(tmp, deserialized->serialize().serialize()); delete deserialized; } TEST(HyperbolicTangent, Serialize) { NeuralNetwork::ActivationFunction::HyperbolicTangent l(2.5); const std::string tmp = l.serialize().serialize(); NeuralNetwork::ActivationFunction::ActivationFunction* deserialized = NeuralNetwork::ActivationFunction::Factory::deserialize(l.serialize()).release(); ASSERT_EQ(tmp, deserialized->serialize().serialize()); delete deserialized; } TEST(Sigmoid, Serialize) { NeuralNetwork::ActivationFunction::Sigmoid l(2.5); const std::string tmp = l.serialize().serialize(); NeuralNetwork::ActivationFunction::ActivationFunction* deserialized = NeuralNetwork::ActivationFunction::Factory::deserialize(l.serialize()).release(); ASSERT_EQ(tmp, deserialized->serialize().serialize()); delete deserialized; }