17db96d56Sopenharmony_ci#!/usr/bin/env python3
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci""" Compare the output of two codecs.
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci(c) Copyright 2005, Marc-Andre Lemburg (mal@lemburg.com).
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci    Licensed to PSF under a Contributor Agreement.
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci"""
107db96d56Sopenharmony_ciimport sys
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_cidef compare_codecs(encoding1, encoding2):
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci    print('Comparing encoding/decoding of   %r and   %r' % (encoding1, encoding2))
157db96d56Sopenharmony_ci    mismatch = 0
167db96d56Sopenharmony_ci    # Check encoding
177db96d56Sopenharmony_ci    for i in range(sys.maxunicode+1):
187db96d56Sopenharmony_ci        u = chr(i)
197db96d56Sopenharmony_ci        try:
207db96d56Sopenharmony_ci            c1 = u.encode(encoding1)
217db96d56Sopenharmony_ci        except UnicodeError as reason:
227db96d56Sopenharmony_ci            c1 = '<undefined>'
237db96d56Sopenharmony_ci        try:
247db96d56Sopenharmony_ci            c2 = u.encode(encoding2)
257db96d56Sopenharmony_ci        except UnicodeError as reason:
267db96d56Sopenharmony_ci            c2 = '<undefined>'
277db96d56Sopenharmony_ci        if c1 != c2:
287db96d56Sopenharmony_ci            print(' * encoding mismatch for 0x%04X: %-14r != %r' % \
297db96d56Sopenharmony_ci                  (i, c1, c2))
307db96d56Sopenharmony_ci            mismatch += 1
317db96d56Sopenharmony_ci    # Check decoding
327db96d56Sopenharmony_ci    for i in range(256):
337db96d56Sopenharmony_ci        c = bytes([i])
347db96d56Sopenharmony_ci        try:
357db96d56Sopenharmony_ci            u1 = c.decode(encoding1)
367db96d56Sopenharmony_ci        except UnicodeError:
377db96d56Sopenharmony_ci            u1 = '<undefined>'
387db96d56Sopenharmony_ci        try:
397db96d56Sopenharmony_ci            u2 = c.decode(encoding2)
407db96d56Sopenharmony_ci        except UnicodeError:
417db96d56Sopenharmony_ci            u2 = '<undefined>'
427db96d56Sopenharmony_ci        if u1 != u2:
437db96d56Sopenharmony_ci            print(' * decoding mismatch for 0x%04X: %-14r != %r' % \
447db96d56Sopenharmony_ci                  (i, u1, u2))
457db96d56Sopenharmony_ci            mismatch += 1
467db96d56Sopenharmony_ci    if mismatch:
477db96d56Sopenharmony_ci        print()
487db96d56Sopenharmony_ci        print('Found %i mismatches' % mismatch)
497db96d56Sopenharmony_ci    else:
507db96d56Sopenharmony_ci        print('-> Codecs are identical.')
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ciif __name__ == '__main__':
537db96d56Sopenharmony_ci    compare_codecs(sys.argv[1], sys.argv[2])
54