import unittest from field_similarity import analyze_fields class TestAnalyzeFields(unittest.TestCase): def test_full_match(self): result = analyze_fields("hello world", "hello@@world") self.assertEqual(result["field_count"], 2) self.assertEqual(result["non_zero_count"], 2) self.assertAlmostEqual(result["avg_ratio"], 1.0) self.assertAlmostEqual(result["max_ratio"], 1.0) def test_partial_match(self): result = analyze_fields("abc", "zab") self.assertEqual(result["field_count"], 1) self.assertEqual(result["non_zero_count"], 1) self.assertAlmostEqual(result["avg_ratio"], 2 / 3) self.assertAlmostEqual(result["max_ratio"], 2 / 3) def test_zero_match(self): result = analyze_fields("abc", "xyz") self.assertEqual(result["field_count"], 1) self.assertEqual(result["non_zero_count"], 0) self.assertAlmostEqual(result["avg_ratio"], 0.0) self.assertAlmostEqual(result["max_ratio"], 0.0) def test_empty_fields_are_skipped(self): result = analyze_fields("abc", "ab@@@@bc") self.assertEqual(result["field_count"], 2) self.assertEqual(result["non_zero_count"], 2) self.assertAlmostEqual(result["avg_ratio"], (1 + 1) / 2) self.assertAlmostEqual(result["max_ratio"], 1.0) def test_all_empty_fields(self): result = analyze_fields("abc", "@@") self.assertEqual(result, {}) def test_empty_field_list_string(self): result = analyze_fields("abc", "") self.assertEqual(result, {}) def test_empty_question(self): result = analyze_fields("", "a@@bb") self.assertEqual(result["field_count"], 2) self.assertEqual(result["non_zero_count"], 0) self.assertAlmostEqual(result["avg_ratio"], 0.0) self.assertAlmostEqual(result["max_ratio"], 0.0) if __name__ == "__main__": unittest.main()