Chris@130: Chris@130: #include "FeatureConditioner.h" Chris@130: Chris@130: #include Chris@130: #include Chris@130: #include Chris@130: Chris@130: using namespace std; Chris@130: Chris@130: #define BOOST_TEST_DYN_LINK Chris@130: #define BOOST_TEST_MAIN Chris@130: Chris@130: #include Chris@130: Chris@130: static vector getTestFeature(double m) Chris@130: { Chris@130: vector f; Chris@130: double fd[] = { 0, 1, 2, 3 }; Chris@130: for (int i = 0; i < 4; ++i) { Chris@130: f.push_back(fd[i] * m); Chris@130: } Chris@130: return f; Chris@130: } Chris@130: Chris@130: BOOST_AUTO_TEST_SUITE(TestFeatureConditioner) Chris@130: Chris@130: BOOST_AUTO_TEST_CASE(nonorm_features) Chris@130: { Chris@130: FeatureConditioner::Parameters params; Chris@130: params.norm = FeatureConditioner::NoNormalisation; Chris@130: params.order = FeatureConditioner::OutputFeatures; Chris@130: vector Chris@130: e1 = getTestFeature(1), Chris@130: e2 = getTestFeature(2), Chris@130: e0 = getTestFeature(0); Chris@130: Chris@130: params.silenceThreshold = 1.0; Chris@130: FeatureConditioner fc(params); Chris@130: vector out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end()); Chris@130: Chris@130: params.silenceThreshold = 7.0; Chris@130: fc = FeatureConditioner(params); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end()); Chris@130: } Chris@130: Chris@130: BOOST_AUTO_TEST_CASE(nonorm_rectderiv) Chris@130: { Chris@130: FeatureConditioner::Parameters params; Chris@130: params.norm = FeatureConditioner::NoNormalisation; Chris@130: params.order = FeatureConditioner::OutputRectifiedDerivative; Chris@130: vector Chris@130: e1 = getTestFeature(1), Chris@130: e2 = getTestFeature(2), Chris@130: e0 = getTestFeature(0); Chris@130: Chris@130: params.silenceThreshold = 1.0; Chris@130: FeatureConditioner fc(params); Chris@130: vector out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: Chris@130: params.silenceThreshold = 7.0; Chris@130: fc = FeatureConditioner(params); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: } Chris@130: Chris@130: BOOST_AUTO_TEST_CASE(nonorm_deriv) Chris@130: { Chris@130: FeatureConditioner::Parameters params; Chris@130: params.norm = FeatureConditioner::NoNormalisation; Chris@130: params.order = FeatureConditioner::OutputDerivative; Chris@130: vector Chris@130: e1 = getTestFeature(1), Chris@130: e2 = getTestFeature(2), Chris@130: e3 = getTestFeature(3), Chris@130: e0 = getTestFeature(0); Chris@130: Chris@130: params.silenceThreshold = 1.0; Chris@130: FeatureConditioner fc(params); Chris@130: vector out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: Chris@130: params.silenceThreshold = 7.0; Chris@130: fc = FeatureConditioner(params); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e3); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e2.begin(), e2.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e1.begin(), e1.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: } Chris@130: Chris@130: BOOST_AUTO_TEST_CASE(sum1_features) Chris@130: { Chris@130: FeatureConditioner::Parameters params; Chris@130: params.norm = FeatureConditioner::NormaliseToSum1; Chris@130: params.order = FeatureConditioner::OutputFeatures; Chris@130: vector Chris@130: e1 = getTestFeature(1), Chris@130: e2 = getTestFeature(2), Chris@130: en = getTestFeature(1.0/6.0), Chris@130: e0 = getTestFeature(0); Chris@130: Chris@130: params.silenceThreshold = 1.0; Chris@130: FeatureConditioner fc(params); Chris@130: vector out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); Chris@130: Chris@130: params.silenceThreshold = 7.0; Chris@130: fc = FeatureConditioner(params); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); Chris@130: } Chris@130: Chris@130: BOOST_AUTO_TEST_CASE(sum1_rectderiv) Chris@130: { Chris@130: FeatureConditioner::Parameters params; Chris@130: params.norm = FeatureConditioner::NormaliseToSum1; Chris@130: params.order = FeatureConditioner::OutputRectifiedDerivative; Chris@130: vector Chris@130: e1 = getTestFeature(1), Chris@130: e2 = getTestFeature(2), Chris@130: en = getTestFeature(1.0/6.0), Chris@130: en2 = getTestFeature(1.0/12.0), Chris@130: e0 = getTestFeature(0); Chris@130: Chris@130: params.silenceThreshold = 1.0; Chris@130: FeatureConditioner fc(params); Chris@130: vector out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en.begin(), en.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: Chris@130: params.silenceThreshold = 7.0; Chris@130: fc = FeatureConditioner(params); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end()); Chris@130: out = fc.process(e1); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), e0.begin(), e0.end()); Chris@130: out = fc.process(e2); Chris@130: BOOST_CHECK_EQUAL_COLLECTIONS(out.begin(), out.end(), en2.begin(), en2.end()); Chris@130: } Chris@130: Chris@130: Chris@130: BOOST_AUTO_TEST_SUITE_END() Chris@130: