from pathlib import Path
import base64,json,hashlib,platform,datetime
p=Path(__file__).parent
def reject(pairs):
    result={}
    for key,value in pairs:
        if key in result:raise ValueError('duplicate key: '+key)
        result[key]=value
    return result
inputs={'forward.json':b'{"item":"ALPHA","item":"BETA"}','reversed.json':b'{"item":"BETA","item":"ALPHA"}','single.json':b'{"item":"ALPHA"}','escaped.json':b'{"item":"ALPHA","\\u0069tem":"BETA"}','nested.json':b'{"box":{"item":"ALPHA","item":"BETA"}}'}
out={'python':platform.python_version(),'generated_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'cases':[]}
for name,raw in inputs.items():
    encoded=base64.b64encode(raw);decoded=base64.b64decode(encoded,validate=True);parsed=json.loads(decoded);pairs=json.loads(decoded,object_pairs_hook=list)
    try:rejection={'accepted':True,'value':json.loads(decoded,object_pairs_hook=reject)}
    except ValueError as exc:rejection={'accepted':False,'error':str(exc)}
    compact=json.dumps(parsed,separators=(',',':')).encode('utf8')
    (p/name).write_bytes(raw);(p/(name+'.b64.txt')).write_bytes(encoded)
    out['cases'].append({'file':name,'bytes':len(raw),'base64_characters':len(encoded),'source_ascii':raw.decode('ascii'),'sha256':hashlib.sha256(raw).hexdigest(),'roundtrip_equal':raw==decoded,'default':parsed,'ordered_pairs':pairs,'reject_duplicates':rejection,'compact_ascii':compact.decode('ascii'),'compact_bytes':len(compact),'compact_sha256':hashlib.sha256(compact).hexdigest(),'compact_equals_source':compact==raw})
(p/'raw-output.json').write_text(json.dumps(out,ensure_ascii=True,indent=2),encoding='utf8')
print(json.dumps(out,ensure_ascii=True))
