| 49 | } |
| 50 | |
| 51 | TEST(ModelTest, EncodeTest) { |
| 52 | ModelProto model_proto = MakeBaseModelProto(); |
| 53 | |
| 54 | AddPiece(&model_proto, WS, 0.0); |
| 55 | AddPiece(&model_proto, "a", 0.1); |
| 56 | AddPiece(&model_proto, "b", 0.2); |
| 57 | AddPiece(&model_proto, "c", 0.3); |
| 58 | AddPiece(&model_proto, "d", 0.4); |
| 59 | AddPiece(&model_proto, "ABC", 0.4); |
| 60 | model_proto.mutable_pieces(8)->set_type( |
| 61 | ModelProto::SentencePiece::USER_DEFINED); |
| 62 | |
| 63 | const Model model(model_proto); |
| 64 | |
| 65 | EncodeResult result; |
| 66 | |
| 67 | result = model.Encode(""); |
| 68 | EXPECT_TRUE(result.empty()); |
| 69 | |
| 70 | result = model.Encode(WS "a" WS "b" WS "c"); |
| 71 | EXPECT_EQ(6, result.size()); |
| 72 | EXPECT_EQ(WS, result[0].first); |
| 73 | EXPECT_EQ("a", result[1].first); |
| 74 | EXPECT_EQ(WS, result[2].first); |
| 75 | EXPECT_EQ("b", result[3].first); |
| 76 | EXPECT_EQ(WS, result[4].first); |
| 77 | EXPECT_EQ("c", result[5].first); |
| 78 | |
| 79 | result = model.Encode(WS "ab" WS "cd" WS "abc"); |
| 80 | EXPECT_EQ(10, result.size()); |
| 81 | EXPECT_EQ(WS, result[0].first); |
| 82 | EXPECT_EQ("a", result[1].first); |
| 83 | EXPECT_EQ("b", result[2].first); |
| 84 | EXPECT_EQ(WS, result[3].first); |
| 85 | EXPECT_EQ("c", result[4].first); |
| 86 | EXPECT_EQ("d", result[5].first); |
| 87 | EXPECT_EQ(WS, result[6].first); |
| 88 | EXPECT_EQ("a", result[7].first); |
| 89 | EXPECT_EQ("b", result[8].first); |
| 90 | EXPECT_EQ("c", result[9].first); |
| 91 | |
| 92 | // makes a broken utf-8 |
| 93 | const std::string broken_utf8 = std::string("あ").substr(0, 1); |
| 94 | result = model.Encode(broken_utf8); |
| 95 | EXPECT_EQ(1, result.size()); |
| 96 | EXPECT_EQ(broken_utf8, result[0].first); |
| 97 | |
| 98 | // "ABC" is treated as one piece, as it is USER_DEFINED. |
| 99 | result = model.Encode(WS "abABCcd"); |
| 100 | EXPECT_EQ(6, result.size()); |
| 101 | EXPECT_EQ(WS, result[0].first); |
| 102 | EXPECT_EQ("a", result[1].first); |
| 103 | EXPECT_EQ("b", result[2].first); |
| 104 | EXPECT_EQ("ABC", result[3].first); |
| 105 | EXPECT_EQ("c", result[4].first); |
| 106 | EXPECT_EQ("d", result[5].first); |
| 107 | } |
| 108 |
nothing calls this directly
no test coverage detected