"""Quick unit test for _coordinate_tertiary_fd (new front-sequence design). 与 tests/cobol_testgen/test_kin07_coordinate.py 对应,验证: - 记录0 主+全部明细键一致(全匹配) - rec1 主+明细1、rec2 主+明细2 单匹配,键单调递增 - R03 同键重复块(休暇种别 01-04)+ 长休暇时长 """ import sys, os sys.path.insert(0, os.path.dirname(__file__)) import logging logging.basicConfig(level=logging.INFO, format='%(message)s') from cobol_testgen.__init__ import _coordinate_tertiary_fd, _find_key_pairs_inner data_fields = [ {'name': 'SWEMP-ID', 'pic': 'X(008)'}, {'name': 'SWDATE', 'pic': '9(008)'}, {'name': 'SREMP-ID', 'pic': 'X(008)'}, {'name': 'SRWORK-DATE', 'pic': '9(008)'}, {'name': 'SLEMP-ID', 'pic': 'X(008)'}, {'name': 'SLDATE', 'pic': '9(008)'}, {'name': 'SLLEAVE-TYPE', 'pic': 'X(002)'}, {'name': 'SLSTART-TIME', 'pic': '9(004)'}, {'name': 'SLEND-TIME', 'pic': '9(004)'}, ] records = [ {'SWEMP-ID': f'R{i:07d}', 'SWDATE': f'{20000101 + i:08d}', 'SREMP-ID': f'C{i:07d}', 'SRWORK-DATE': f'{20000101 + i:08d}', 'SLEMP-ID': f'I{i:07d}', 'SLDATE': f'{20000101 + i:08d}', 'SLLEAVE-TYPE': '99', 'SLSTART-TIME': '0822', 'SLEND-TIME': '0922'} for i in range(12) ] fd_prefixes = ['SW', 'SR', 'SL'] print('=== _find_key_pairs_inner ===') print('SW-SR:', _find_key_pairs_inner('SW', 'SR', data_fields)) print('SW-SL:', _find_key_pairs_inner('SW', 'SL', data_fields)) print() print('=== _coordinate_tertiary_fd ===') _coordinate_tertiary_fd(records, fd_prefixes, data_fields) print() for i, r in enumerate(records[:8]): print(f' records[{i}]: SWEMP={r["SWEMP-ID"]}, SWDATE={r["SWDATE"]}, ' f'SREMP={r["SREMP-ID"]}, SLEMP={r["SLEMP-ID"]}, LT={r["SLLEAVE-TYPE"]}, ' f'{r["SLSTART-TIME"]}-{r["SLEND-TIME"]}') # Verify assert records[0]['SWEMP-ID'] == records[0]['SREMP-ID'] == records[0]['SLEMP-ID'], 'rec0 三键应一致' assert records[1]['SWEMP-ID'] == records[1]['SREMP-ID'], 'rec1 应为主+明细1 匹配' assert records[2]['SWEMP-ID'] != records[2]['SREMP-ID'], 'rec2 明细1 不应匹配' # 键单调递增(merge-join 指针对齐前提) k0, k1, k2 = records[0]['SWEMP-ID'], records[1]['SWEMP-ID'], records[2]['SWEMP-ID'] assert k0 < k1 < k2, f'前置序列主键应递增: {k0} < {k1} < {k2}' # R03 同键重复块 + 休暇种别 + 长时长(块2) assert all(records[i]['SLEMP-ID'] == records[0]['SLEMP-ID'] for i in range(4)), 'R03 前4条键应一致' assert [records[i]['SLLEAVE-TYPE'] for i in range(4)] == ['01', '02', '03', '04'], '休暇种别 01-04' for i in range(4, 8): assert records[i]['SLSTART-TIME'] == '0600' and records[i]['SLEND-TIME'] == '2200', '块2 长时长' print() print('ALL ASSERTIONS PASSED')