Files
cobol-java-v3/test_tertiary.py
T

64 lines
2.7 KiB
Python

"""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')