Mercurial > hg > match-vamp
view test/TestDistanceMetric.cpp @ 142:7f6f150c1edf silence_penalty
Attempt naive silence penalty -- not currently working, but the plots are food for thought
author | Chris Cannam |
---|---|
date | Thu, 15 Jan 2015 17:29:49 +0000 |
parents | af69db43f5a4 |
children |
line wrap: on
line source
#include "DistanceMetric.h" #include <vector> #include <iostream> #include <cmath> using namespace std; #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MAIN #include <boost/test/unit_test.hpp> static vector<double> getTestFeature(double m) { vector<double> f; double fd[] = { 0, 1, 2, 3 }; for (int i = 0; i < 4; ++i) { f.push_back(fd[i] * m); } return f; } BOOST_AUTO_TEST_SUITE(TestDistanceMetric) BOOST_AUTO_TEST_CASE(nonorm) { DistanceMetric::Parameters params; params.norm = DistanceMetric::NoDistanceNormalisation; params.silencePenalty = 0.0; DistanceMetric dm(params); vector<double> e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0); } BOOST_AUTO_TEST_CASE(sum) { DistanceMetric::Parameters params; params.norm = DistanceMetric::NormaliseDistanceToSum; params.silencePenalty = 0.0; DistanceMetric dm(params); vector<double> e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 1.0/3.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.0); } BOOST_AUTO_TEST_CASE(penalty) { DistanceMetric::Parameters params; params.norm = DistanceMetric::NormaliseDistanceToSum; params.silencePenalty = 0.5; DistanceMetric dm(params); vector<double> e1 = getTestFeature(1), e2 = getTestFeature(2), e0 = getTestFeature(0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.5); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.5); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0); BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 1.0/3.0); BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.5); } BOOST_AUTO_TEST_SUITE_END()