#!/usr/bin/env python3
import json,pathlib
P=pathlib.Path(__file__).resolve().parent
def main():
 b=json.loads((P/'audit-B.json').read_text());c=json.loads((P/'audit-C.json').read_text());r=c['report'];g=json.loads((P/'key-grammar.json').read_text())['report']
 assert b['status']==r['status']=='pass' and c['exit_code']==c['stderr_bytes']==0
 key=next(x for x in b['columns'] if x['column_name']=='idempotency_key')
 assert key['collation_name']=='utf8mb4_unicode_ci' and key['is_nullable']=='NO' and int(key['character_maximum_length'])==128
 assert r['bounded_stats']['target_rows']==g['target_rows']==47 and r['bounded_stats']['max_allowed']==1000
 assert r['actual_duplicate_group_count']==r['ascii_folded_duplicate_group_count']==0
 assert g['ascii_keys']==g['generated_ascii_grammar_keys']==47 and g['non_ascii_keys']==g['outside_generated_ascii_grammar_keys']==0
 assert r['synthetic_comparisons']['trailing_blank']['comparison']['equal_value']==1 and r['synthetic_comparisons']['trailing_blank']['group_count']==2
 assert b['synthetic_comparisons']['trailing_blank']['group_count']==1
 assert r['target_parameters']['ini_error']['driver_code']==-5504 and r['target_parameters']['function_error']['driver_code']==-5730
 results={}
 for lane in ['B','C']:
  x=json.loads((P/('unique-probe-'+lane+'.json')).read_text());x=x['report'] if lane=='C' else x
  assert x['status']=='pass' and x['table']=='cdxu11a7c9' and x['ddl_count']==2 and x['insert_attempts']==8
  assert x['dropped'] is True and x['objects_remaining']==x['old_business_table_writes']==x['global_parameter_changes']==x['privilege_changes']==0
  assert x['drop_guard_all_rows_whitelisted'] is True
  bycase={a['case']:a for a in x['attempts'] if a['pair_ordinal']==1}
  assert all(bycase[n]['result']=='unique_rejected' for n in ['same','case','trailing_blank'])
  assert bycase['accent']['result']==('unique_rejected' if lane=='B' else 'inserted')
  assert x['inserted']==(4 if lane=='B' else 5) and x['unique_rejections']==(4 if lane=='B' else 3)
  assert all(a['affected_rows']==(1 if a['result']=='inserted' else 0) for a in x['attempts'])
  results[lane]={n:a['result'] for n,a in bycase.items()}
 print(json.dumps({'status':'pass','actual_unique_pairs_verified':8,'total_ddl':4,'total_insert_attempts':16,'old_business_table_writes':0,'objects_remaining':0,'second_insert_outcomes':results,'Unicode_full_equivalence':False},indent=2))
if __name__=='__main__':main()
