import sys, os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) from comparator.field_compare import compare_field, DEFAULT_TOLERANCE def test_exact_match(): r = compare_field("BR-AMT", "1500000", "1500000", "decimal") assert r.status == "PASS" def test_within_tolerance(): r = compare_field("BR-AMT", "1500000", "1499999.99", "decimal", tolerance=DEFAULT_TOLERANCE) assert r.status == "TOLERATED" def test_beyond_tolerance(): r = compare_field("BR-AMT", "1500000", "1000000", "decimal", tolerance=DEFAULT_TOLERANCE) assert r.status == "MISMATCH" def test_string_trim(): r = compare_field("BR-STATUS", "A ", "A", "string") assert r.status == "PASS" def test_date_normalization(): r = compare_field("BR-DATE", "20260522", "2026-05-22", "date") assert r.status == "PASS" def test_cobol_default(): from decimal import Decimal, ROUND_DOWN r = compare_field("BR-AMT", "\x00\x00\x00\x00\x00", "0", "decimal") assert r.status in ("PASS", "TOLERATED") def test_java_null_vs_value(): r = compare_field("BR-AMT", "1500000", "None", "decimal") assert r.status in ("MISMATCH", "NOT_SET") def test_negative_numbers(): r = compare_field("AMT", "-1500", "-1500", "decimal") assert r.status == "PASS" def test_mixed_precision(): r = compare_field("AMT", "1500.00", "1500", "decimal", tolerance=DEFAULT_TOLERANCE) assert r.status == "PASS"