64 lines
2.7 KiB
Python
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')
|