#include #include #include #include #include "data_array.h" #include "mocks/mock_translation_table.h" #include "mocks/mock_vocabulary.h" #include "phrase_builder.h" #include "max_lex_target_given_source.h" using namespace std; using namespace ::testing; namespace extractor { namespace features { namespace { class MaxLexTargetGivenSourceTest : public Test { protected: virtual void SetUp() { vector source_words = {"f1", "f2", "f3"}; vector target_words = {"e1", "e2", "e3"}; vocabulary = make_shared(); for (size_t i = 0; i < source_words.size(); ++i) { EXPECT_CALL(*vocabulary, GetTerminalValue(i)) .WillRepeatedly(Return(source_words[i])); } for (size_t i = 0; i < target_words.size(); ++i) { EXPECT_CALL(*vocabulary, GetTerminalValue(i + source_words.size())) .WillRepeatedly(Return(target_words[i])); } phrase_builder = make_shared(vocabulary); table = make_shared(); for (size_t i = 0; i < source_words.size(); ++i) { for (size_t j = 0; j < target_words.size(); ++j) { int value = i - j; EXPECT_CALL(*table, GetTargetGivenSourceScore( source_words[i], target_words[j])).WillRepeatedly(Return(value)); } } for (size_t i = 0; i < target_words.size(); ++i) { int value = i * 3; EXPECT_CALL(*table, GetTargetGivenSourceScore( DataArray::NULL_WORD_STR, target_words[i])) .WillRepeatedly(Return(value)); } feature = make_shared(table); } shared_ptr vocabulary; shared_ptr phrase_builder; shared_ptr table; shared_ptr feature; }; TEST_F(MaxLexTargetGivenSourceTest, TestGetName) { EXPECT_EQ("MaxLexEgivenF", feature->GetName()); } TEST_F(MaxLexTargetGivenSourceTest, TestScore) { vector source_symbols = {0, 1, 2}; Phrase source_phrase = phrase_builder->Build(source_symbols); vector target_symbols = {3, 4, 5}; Phrase target_phrase = phrase_builder->Build(target_symbols); FeatureContext context(source_phrase, target_phrase, 0.3, 7, 19); EXPECT_EQ(-log10(36), feature->Score(context)); } } // namespace } // namespace features } // namespace extractor