diff options
Diffstat (limited to 'test/codes/AztecTest.mc')
| -rw-r--r-- | test/codes/AztecTest.mc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/codes/AztecTest.mc b/test/codes/AztecTest.mc new file mode 100644 index 0000000..6ebc2bb --- /dev/null +++ b/test/codes/AztecTest.mc @@ -0,0 +1,73 @@ +// Author: cirakg & claude ai +// Summary: Tests for the Aztec encoder: aztec_code_generator references, decoding dumps (mixed text, UTF-8), limits and stuffing. + +import Toybox.Lang; +import Toybox.Test; + +// README 12.4 check 1 where comparable: single-class payloads give the same +// bits as the reference's optimal sequence, so the symbols must match, +// compact and full range (with reference grids), at all four EC levels. +(:test) +function aztecMatchesReference(logger as Test.Logger) as Boolean { + var rows = CodeVectors.AZTEC; + for (var i = 0; i < rows.size(); i++) { + var row = rows[i] as Array; + var payload = row[0] as String; + var result = Aztec.encode(payload, row[1] as Number); + if (result instanceof Codes.CodeError) { + logger.error("row " + i + ": " + result.message); + return false; + } + var expectedSize = row[2] as Number; + var expected = row[3] as String; + if (result.width != expectedSize || !MatrixFixtures.packedHex(result).equals(expected)) { + logger.error("row " + i + " '" + Text.clip(payload, 20) + "': size " + result.width + ", reference " + expectedSize); + return false; + } + } + logger.debug("CODES aztec reference rows=" + rows.size()); + return true; +} + +// README 12.4 check 2: mixed content (Binary Shift, mode latches), UTF-8 +// and long payloads, decoded by tools/check_codes.py. +(:test) +function aztecDumpForDecoding(logger as Test.Logger) as Boolean { + var payloads = ["Boarding pass FAKE 0042, seat 12A", "Zürich ✓ Ünïcödé", "https://example.com/m/fake?id=0042", + "abcDEF123 xyz", "!@#$%^&*()", "a", "MiXeD 12 cAsE 34 ."]; + var long = ""; + for (var i = 0; i < 40; i++) { + long += "Fake-Ticket/" + i + " "; + } + payloads.add(long); + for (var i = 0; i < payloads.size(); i++) { + var text = payloads[i] as String; + var result = Aztec.encode(text, i % 4); + if (result instanceof Codes.CodeError) { + logger.error("'" + text + "': " + result.message); + return false; + } + MatrixFixtures.dump(logger, Codes.AZTEC, text, result); + } + return true; +} + +(:test) +function aztecStuffingAndLimits(logger as Test.Logger) as Boolean { + // Six zero bits in 6-bit codewords: 00000 gets a stuffed 1, then the + // last 0 is padded with ones (and its all-ones last bit cleared). + var words = Aztec.stuff([0, 0, 0, 0, 0, 0]b, 6); + if (words.size() != 2 || words[0] != 1 || words[1] != 0x1F) { + logger.error("stuffing gave " + words.toString()); + return false; + } + if (!(Aztec.encode("", 1) instanceof Codes.CodeError)) { + logger.error("empty text accepted"); + return false; + } + var big = ""; + for (var i = 0; i < 400; i++) { + big += "~~~~~~~~~~"; + } + return Aztec.encode(big, 3) instanceof Codes.CodeError; +} |
