@@ -29,28 +29,40 @@ double jaro_similarity(const Sentence1& s1, const Sentence2& s2, double score_cu
2929#ifdef RAPIDFUZZ_SIMD
3030 std::vector<double > results (256 / 8 );
3131 if (s1.size () <= 8 ) {
32- rapidfuzz::experimental::MultiJaro<8 > simd_scorer (1 );
33- simd_scorer.insert (s1);
32+ rapidfuzz::experimental::MultiJaro<8 > simd_scorer (32 );
33+ for (size_t i = 0 ; i < 32 ; ++i)
34+ simd_scorer.insert (s1);
35+
3436 simd_scorer.similarity (&results[0 ], results.size (), s2, score_cutoff);
35- REQUIRE (res1 == Approx (results[0 ]));
37+ for (size_t i = 0 ; i < 32 ; ++i)
38+ REQUIRE (res1 == Approx (results[i]));
3639 }
3740 if (s1.size () <= 16 ) {
38- rapidfuzz::experimental::MultiJaro<16 > simd_scorer (1 );
39- simd_scorer.insert (s1);
41+ rapidfuzz::experimental::MultiJaro<16 > simd_scorer (16 );
42+ for (size_t i = 0 ; i < 16 ; ++i)
43+ simd_scorer.insert (s1);
44+
4045 simd_scorer.similarity (&results[0 ], results.size (), s2, score_cutoff);
41- REQUIRE (res1 == Approx (results[0 ]));
46+ for (size_t i = 0 ; i < 16 ; ++i)
47+ REQUIRE (res1 == Approx (results[i]));
4248 }
4349 if (s1.size () <= 32 ) {
44- rapidfuzz::experimental::MultiJaro<32 > simd_scorer (1 );
45- simd_scorer.insert (s1);
50+ rapidfuzz::experimental::MultiJaro<32 > simd_scorer (8 );
51+ for (size_t i = 0 ; i < 8 ; ++i)
52+ simd_scorer.insert (s1);
53+
4654 simd_scorer.similarity (&results[0 ], results.size (), s2, score_cutoff);
47- REQUIRE (res1 == Approx (results[0 ]));
55+ for (size_t i = 0 ; i < 8 ; ++i)
56+ REQUIRE (res1 == Approx (results[i]));
4857 }
4958 if (s1.size () <= 64 ) {
50- rapidfuzz::experimental::MultiJaro<64 > simd_scorer (1 );
51- simd_scorer.insert (s1);
59+ rapidfuzz::experimental::MultiJaro<64 > simd_scorer (4 );
60+ for (size_t i = 0 ; i < 4 ; ++i)
61+ simd_scorer.insert (s1);
62+
5263 simd_scorer.similarity (&results[0 ], results.size (), s2, score_cutoff);
53- REQUIRE (res1 == Approx (results[0 ]));
64+ for (size_t i = 0 ; i < 4 ; ++i)
65+ REQUIRE (res1 == Approx (results[i]));
5466 }
5567#endif
5668
@@ -87,28 +99,40 @@ double jaro_distance(const Sentence1& s1, const Sentence2& s2, double score_cuto
8799#ifdef RAPIDFUZZ_SIMD
88100 std::vector<double > results (256 / 8 );
89101 if (s1.size () <= 8 ) {
90- rapidfuzz::experimental::MultiJaro<8 > simd_scorer (1 );
91- simd_scorer.insert (s1);
102+ rapidfuzz::experimental::MultiJaro<8 > simd_scorer (32 );
103+ for (size_t i = 0 ; i < 32 ; ++i)
104+ simd_scorer.insert (s1);
105+
92106 simd_scorer.distance (&results[0 ], results.size (), s2, score_cutoff);
93- REQUIRE (res1 == Approx (results[0 ]));
107+ for (size_t i = 0 ; i < 32 ; ++i)
108+ REQUIRE (res1 == Approx (results[i]));
94109 }
95110 if (s1.size () <= 16 ) {
96- rapidfuzz::experimental::MultiJaro<16 > simd_scorer (1 );
97- simd_scorer.insert (s1);
111+ rapidfuzz::experimental::MultiJaro<16 > simd_scorer (16 );
112+ for (size_t i = 0 ; i < 16 ; ++i)
113+ simd_scorer.insert (s1);
114+
98115 simd_scorer.distance (&results[0 ], results.size (), s2, score_cutoff);
99- REQUIRE (res1 == Approx (results[0 ]));
116+ for (size_t i = 0 ; i < 16 ; ++i)
117+ REQUIRE (res1 == Approx (results[i]));
100118 }
101119 if (s1.size () <= 32 ) {
102- rapidfuzz::experimental::MultiJaro<32 > simd_scorer (1 );
103- simd_scorer.insert (s1);
120+ rapidfuzz::experimental::MultiJaro<32 > simd_scorer (8 );
121+ for (size_t i = 0 ; i < 8 ; ++i)
122+ simd_scorer.insert (s1);
123+
104124 simd_scorer.distance (&results[0 ], results.size (), s2, score_cutoff);
105- REQUIRE (res1 == Approx (results[0 ]));
125+ for (size_t i = 0 ; i < 8 ; ++i)
126+ REQUIRE (res1 == Approx (results[i]));
106127 }
107128 if (s1.size () <= 64 ) {
108- rapidfuzz::experimental::MultiJaro<64 > simd_scorer (1 );
109- simd_scorer.insert (s1);
129+ rapidfuzz::experimental::MultiJaro<64 > simd_scorer (4 );
130+ for (size_t i = 0 ; i < 4 ; ++i)
131+ simd_scorer.insert (s1);
132+
110133 simd_scorer.distance (&results[0 ], results.size (), s2, score_cutoff);
111- REQUIRE (res1 == Approx (results[0 ]));
134+ for (size_t i = 0 ; i < 4 ; ++i)
135+ REQUIRE (res1 == Approx (results[i]));
112136 }
113137#endif
114138
@@ -197,4 +221,30 @@ TEST_CASE("JaroTest")
197221 " 0000000000000000000000000000000000000000000000000000000000" )) ==
198222 Approx (0.8359375 ));
199223 }
200- }
224+
225+ SECTION (" testFuzzingRegressions" )
226+ {
227+ #ifdef RAPIDFUZZ_SIMD
228+ {
229+ std::string s2 = " 010101010101010101010101010101010101010101010101010101010101010101"
230+ " 010101010101010101010101010101010101010101010101010101010101010101"
231+ " 010101010101010101010101010101010101010101010101010101010101010101"
232+ " 0101010101010101010101010101010101010101010101010101010101" ;
233+
234+ std::vector<double > results (512 / 8 );
235+ rapidfuzz::experimental::MultiJaro<8 > simd_scorer (64 );
236+ for (size_t i = 0 ; i < 32 ; ++i)
237+ simd_scorer.insert (" 10010010" );
238+
239+ simd_scorer.insert (" 00100100" );
240+ simd_scorer.similarity (&results[0 ], results.size (), s2);
241+
242+ for (size_t i = 0 ; i < 32 ; ++i)
243+ REQUIRE (results[i] == Approx (0.593750 ));
244+
245+ REQUIRE (results[32 ] == Approx (0.593750 ));
246+ }
247+ #endif
248+
249+ }
250+ }
0 commit comments