00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <stdexcept>
00021
00022 #include <boost/test/unit_test.hpp>
00023
00024 #include "moses/FF/StatelessFeatureFunction.h"
00025 #include "ScoreComponentCollection.h"
00026
00027 using namespace Moses;
00028 using namespace std;
00029
00030 BOOST_AUTO_TEST_SUITE(scc)
00031
00032 class MockStatelessFeatureFunction : public StatelessFeatureFunction
00033 {
00034 public:
00035 MockStatelessFeatureFunction(size_t n, const string &line) :
00036 StatelessFeatureFunction(n, line) {}
00037 void EvaluateWhenApplied(const Hypothesis&, ScoreComponentCollection*) const {}
00038 void EvaluateWhenApplied(const ChartHypothesis&, ScoreComponentCollection*) const {}
00039 void EvaluateWithSourceContext(const InputType &input
00040 , const InputPath &inputPath
00041 , const TargetPhrase &targetPhrase
00042 , const StackVec *stackVec
00043 , ScoreComponentCollection &scoreBreakdown
00044 , ScoreComponentCollection *estimatedScores) const {
00045 }
00046
00047 void EvaluateTranslationOptionListWithSourceContext(const InputType &input
00048 , const TranslationOptionList &translationOptionList) const {
00049 }
00050 void EvaluateInIsolation(const Phrase &source
00051 , const TargetPhrase &targetPhrase
00052 , ScoreComponentCollection &scoreBreakdown
00053 , ScoreComponentCollection &estimatedScores) const {
00054 }
00055
00056 };
00057
00058 class MockSingleFeature : public MockStatelessFeatureFunction
00059 {
00060 public:
00061 MockSingleFeature(): MockStatelessFeatureFunction(1, "MockSingle") {}
00062
00063 bool IsUseable(const FactorMask &mask) const {
00064 return true;
00065 }
00066 };
00067
00068 class MockMultiFeature : public MockStatelessFeatureFunction
00069 {
00070 public:
00071 MockMultiFeature(): MockStatelessFeatureFunction(5, "MockMulti") {}
00072
00073 bool IsUseable(const FactorMask &mask) const {
00074 return true;
00075 }
00076
00077 };
00078
00079 class MockSparseFeature : public MockStatelessFeatureFunction
00080 {
00081 public:
00082 MockSparseFeature(): MockStatelessFeatureFunction(0, "MockSparse") {}
00083
00084 bool IsUseable(const FactorMask &mask) const {
00085 return true;
00086 }
00087 };
00088
00089
00090
00091 struct MockProducers {
00092 MockProducers() {
00093 FeatureFunction::Register(&single);
00094 FeatureFunction::Register(&multi);
00095 FeatureFunction::Register(&sparse);
00096 }
00097
00098 MockSingleFeature single;
00099 MockMultiFeature multi;
00100 MockSparseFeature sparse;
00101 };
00102
00103 BOOST_FIXTURE_TEST_CASE(ctor, MockProducers)
00104 {
00105 ScoreComponentCollection scc;
00106 BOOST_CHECK_EQUAL(scc.GetScoreForProducer(&single),0);
00107 float expected[] = {0,0,0,0,0};
00108 std::vector<float> actual= scc.GetScoresForProducer(&multi);
00109 BOOST_CHECK_EQUAL_COLLECTIONS(expected, expected+5, actual.begin(), actual.begin()+5);
00110 }
00111
00112 BOOST_FIXTURE_TEST_CASE(plusequals, MockProducers)
00113 {
00114 float arr1[] = {1,2,3,4,5};
00115 float arr2[] = {2,4,6,8,10};
00116 std::vector<float> vec1(arr1,arr1+5);
00117 std::vector<float> vec2(arr2,arr2+5);
00118
00119 ScoreComponentCollection scc;
00120 scc.PlusEquals(&single, 3.4f);
00121 BOOST_CHECK_EQUAL(scc.GetScoreForProducer(&single), 3.4f);
00122 scc.PlusEquals(&multi,vec1);
00123 std::vector<float> actual = scc.GetScoresForProducer(&multi);
00124 BOOST_CHECK_EQUAL_COLLECTIONS(vec1.begin(),vec1.end()
00125 ,actual.begin(), actual.end());
00126 scc.PlusEquals(&multi,vec1);
00127 actual = scc.GetScoresForProducer(&multi);
00128 BOOST_CHECK_EQUAL_COLLECTIONS(vec2.begin(),vec2.end(),
00129 actual.begin(), actual.end());
00130
00131 BOOST_CHECK_EQUAL(scc.GetScoreForProducer(&single), 3.4f);
00132 }
00133
00134 BOOST_FIXTURE_TEST_CASE(sparse_feature, MockProducers)
00135 {
00136 ScoreComponentCollection scc;
00137 scc.Assign(&sparse, "first", 1.3f);
00138 scc.Assign(&sparse, "second", 2.1f);
00139 BOOST_CHECK_EQUAL( scc.GetScoreForProducer(&sparse,"first"), 1.3f);
00140 BOOST_CHECK_EQUAL( scc.GetScoreForProducer(&sparse,"second"), 2.1f);
00141 BOOST_CHECK_EQUAL( scc.GetScoreForProducer(&sparse,"third"), 0.0f);
00142 scc.Assign(&sparse, "first", -1.9f);
00143 BOOST_CHECK_EQUAL( scc.GetScoreForProducer(&sparse,"first"), -1.9f);
00144 scc.PlusEquals(&sparse, StringPiece("first"), -1.9f);
00145 BOOST_CHECK_EQUAL( scc.GetScoreForProducer(&sparse,"first"), -3.8f);
00146 }
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 BOOST_AUTO_TEST_SUITE_END()
00184