@@ -163,10 +163,60 @@ TEST(AssociatedPhrasesV2Test, SplitReadings) {
163163 // Pathological cases, but should still yield the following results.
164164 result = AssociatedPhrasesV2::SplitReadings (" A-B-" );
165165 EXPECT_EQ (result, (std::vector<std::string>{" A" , " B" , " " }));
166+ result = AssociatedPhrasesV2::SplitReadings (" A- B -" );
167+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " B " , " " }));
168+ result = AssociatedPhrasesV2::SplitReadings (" A -B- " );
169+ EXPECT_EQ (result, (std::vector<std::string>{" A " , " B" , " " }));
170+ result = AssociatedPhrasesV2::SplitReadings (" A-B " );
171+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " B " }));
166172 result = AssociatedPhrasesV2::SplitReadings (" A-B--" );
167173 EXPECT_EQ (result, (std::vector<std::string>{" A" , " B" , " " , " " }));
168174 result = AssociatedPhrasesV2::SplitReadings (" -" );
169175 EXPECT_EQ (result, (std::vector<std::string>{" " , " " }));
176+
177+ // Edge cases: _punctuation_- and similar ones need to be treated carefully.
178+ result = AssociatedPhrasesV2::SplitReadings (" _foo_-" );
179+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-" }));
180+ result = AssociatedPhrasesV2::SplitReadings (" foo_-" );
181+ EXPECT_EQ (result, (std::vector<std::string>{" foo_-" }));
182+ result = AssociatedPhrasesV2::SplitReadings (" _foo_--_bar_-" );
183+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-" , " _bar_-" }));
184+ result = AssociatedPhrasesV2::SplitReadings (" _foo_-_bar_-" );
185+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-_bar_-" }));
186+ result = AssociatedPhrasesV2::SplitReadings (" _foo_--" );
187+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-" , " " }));
188+ result = AssociatedPhrasesV2::SplitReadings (" -_foo_-" );
189+ EXPECT_EQ (result, (std::vector<std::string>{" " , " _foo_-" }));
190+ result = AssociatedPhrasesV2::SplitReadings (" A-_foo_--B" );
191+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " _foo_-" , " B" }));
192+ result = AssociatedPhrasesV2::SplitReadings (" A-_foo_---B" );
193+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " _foo_-" , " " , " B" }));
194+ result = AssociatedPhrasesV2::SplitReadings (" -_foo_-" );
195+ EXPECT_EQ (result, (std::vector<std::string>{" " , " _foo_-" }));
196+ result = AssociatedPhrasesV2::SplitReadings (" _--_foo_-" );
197+ EXPECT_EQ (result, (std::vector<std::string>{" _-" , " _foo_-" }));
198+
199+ // Edge cases: _punctuation__ needs to be split correctly
200+ result = AssociatedPhrasesV2::SplitReadings (" foo__-" );
201+ EXPECT_EQ (result, (std::vector<std::string>{" foo__" , " " }));
202+ result = AssociatedPhrasesV2::SplitReadings (" _foo__-_bar_-" );
203+ EXPECT_EQ (result, (std::vector<std::string>{" _foo__" , " _bar_-" }));
204+ result = AssociatedPhrasesV2::SplitReadings (" A-_foo__-B" );
205+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " _foo__" , " B" }));
206+ result = AssociatedPhrasesV2::SplitReadings (" A-_foo__--B" );
207+ EXPECT_EQ (result, (std::vector<std::string>{" A" , " _foo__" , " " , " B" }));
208+ result = AssociatedPhrasesV2::SplitReadings (" _foo_--_foo__-B" );
209+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-" , " _foo__" , " B" }));
210+ result = AssociatedPhrasesV2::SplitReadings (" _foo__-_foo_--B" );
211+ EXPECT_EQ (result, (std::vector<std::string>{" _foo__" , " _foo_-" , " B" }));
212+ result = AssociatedPhrasesV2::SplitReadings (" __-_foo_-" );
213+ EXPECT_EQ (result, (std::vector<std::string>{" __" , " _foo_-" }));
214+ result = AssociatedPhrasesV2::SplitReadings (" __--_foo_-" );
215+ EXPECT_EQ (result, (std::vector<std::string>{" __" , " " , " _foo_-" }));
216+
217+ // This is actually malformed, but still good to test.
218+ result = AssociatedPhrasesV2::SplitReadings (" _foo_-_foo_--B" );
219+ EXPECT_EQ (result, (std::vector<std::string>{" _foo_-_foo_-" , " B" }));
170220}
171221
172222TEST (AssociatedPhrasesV2Test, ReturnsDeduplicatedResults) {
0 commit comments