@@ -276,3 +276,77 @@ mod overlap_tests {
276276 assert_eq ! ( measure. minimum_common_feature_count( query_size, 5 , 0.5 ) , 3 ) ;
277277 }
278278}
279+
280+ // --- Edge Case Tests ---
281+
282+ fn create_dummy_db ( ) -> HashDb {
283+ let feature_extractor = Arc :: new ( CharacterNgrams :: new ( 2 , "$" ) ) ;
284+ HashDb :: new ( feature_extractor)
285+ }
286+
287+ #[ test]
288+ fn test_cosine_edge_cases ( ) {
289+ let measure = Cosine ;
290+ let mut interner = Rodeo :: default ( ) ;
291+ let x = vec ! [ interner. get_or_intern( "a" ) ] ;
292+ let empty = vec ! [ ] ;
293+
294+ // Similarity: Empty inputs
295+ assert_eq ! ( measure. similarity( & empty, & empty) , 0.0 ) ;
296+ assert_eq ! ( measure. similarity( & x, & empty) , 0.0 ) ;
297+ assert_eq ! ( measure. similarity( & empty, & x) , 0.0 ) ;
298+
299+ // max_feature_size: alpha = 0.0
300+ let db = create_dummy_db ( ) ;
301+ // Should return db.max_feature_len() (which is 0 for empty db)
302+ assert_eq ! ( measure. max_feature_size( 5 , 0.0 , & db) , 0 ) ;
303+ }
304+
305+ #[ test]
306+ fn test_dice_edge_cases ( ) {
307+ let measure = Dice ;
308+ let mut interner = Rodeo :: default ( ) ;
309+ let x = vec ! [ interner. get_or_intern( "a" ) ] ;
310+ let empty = vec ! [ ] ;
311+
312+ // Similarity: Empty inputs
313+ assert_eq ! ( measure. similarity( & empty, & empty) , 1.0 ) ;
314+ assert_eq ! ( measure. similarity( & x, & empty) , 0.0 ) ;
315+ assert_eq ! ( measure. similarity( & empty, & x) , 0.0 ) ;
316+
317+ // min_feature_size: alpha > 2.0
318+ assert_eq ! ( measure. min_feature_size( 5 , 2.1 ) , 0 ) ;
319+
320+ // max_feature_size: alpha = 0.0
321+ let db = create_dummy_db ( ) ;
322+ assert_eq ! ( measure. max_feature_size( 5 , 0.0 , & db) , 0 ) ;
323+ }
324+
325+ #[ test]
326+ fn test_jaccard_edge_cases ( ) {
327+ let measure = Jaccard ;
328+ let mut interner = Rodeo :: default ( ) ;
329+ let x = vec ! [ interner. get_or_intern( "a" ) ] ;
330+ let empty = vec ! [ ] ;
331+
332+ // Similarity: Empty inputs
333+ assert_eq ! ( measure. similarity( & empty, & empty) , 1.0 ) ;
334+ assert_eq ! ( measure. similarity( & x, & empty) , 0.0 ) ;
335+ assert_eq ! ( measure. similarity( & empty, & x) , 0.0 ) ;
336+
337+ // minimum_common_feature_count: alpha = -1.0
338+ assert_eq ! ( measure. minimum_common_feature_count( 5 , 5 , -1.0 ) , 0 ) ;
339+ }
340+
341+ #[ test]
342+ fn test_overlap_edge_cases ( ) {
343+ let measure = Overlap ;
344+ let mut interner = Rodeo :: default ( ) ;
345+ let x = vec ! [ interner. get_or_intern( "a" ) ] ;
346+ let empty = vec ! [ ] ;
347+
348+ // Similarity: Empty inputs
349+ assert_eq ! ( measure. similarity( & empty, & empty) , 1.0 ) ;
350+ assert_eq ! ( measure. similarity( & x, & empty) , 0.0 ) ;
351+ assert_eq ! ( measure. similarity( & empty, & x) , 0.0 ) ;
352+ }
0 commit comments