diff options
| author | cirakg <cirakg@cirakg.xyz> | 2026-10-20 02:43:08 +0200 |
|---|---|---|
| committer | cirakg <cirakg@cirakg.xyz> | 2026-10-20 02:43:08 +0200 |
| commit | e3cc458d3b9aadb9459b51ef0120621408093f38 (patch) | |
| tree | dbecce9c30247e407a739b997374bb0752b2cc79 /docs | |
| parent | fa9c695256de1c7fe007ba5d6bb9b28b1deb5a5a (diff) | |
docs: record M6a (linear barcodes) results
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/DEVELOPER_GUIDE.md | 7 | ||||
| -rw-r--r-- | docs/TESTING.md | 11 |
2 files changed, 17 insertions, 1 deletions
diff --git a/docs/DEVELOPER_GUIDE.md b/docs/DEVELOPER_GUIDE.md index d03a8fe..14c4e05 100644 --- a/docs/DEVELOPER_GUIDE.md +++ b/docs/DEVELOPER_GUIDE.md @@ -127,4 +127,9 @@ Debug builds print `DIAG first_frame startup_ms=... mem_used=... mem_total=...` - **Import inputs**: new parser cases go into `test/import/` (fixtures are built in `ImportSupport.mc`, all fake). To widen the fuzz corpus, change the seeds or mutations in `tools/gen_fuzz_corpus.py` and run `make corpus`. The Python tests check that the committed corpus matches the generator. - **A settings form** (M7 adds the rest): declare its properties in `resources/settings/properties.xml` (reading an undeclared one crashes), add the form to `resources/settings/settings.xml` with its strings, and handle it in `source/settings/SettingsProcessor.mc`. The form is applied only when its switch is on. The processor clears the fields afterwards and remembers the form's hash. - **On-watch numbers**: sideload a debug build (`make build DEVICE=fr70`, copy `build/debug/fr70.prg` to the watch's `GARMIN/APPS` folder over USB). Then open the menu and choose "Debug: benchmark". -- **A barcode symbology** (from M6): one encoder module under `source/codes/`, its validator, unit tests with reference patterns, and the checks in [README 12.4](../README.md#124-how-each-symbology-is-proven-scannable). +- **A barcode symbology**: add an encoder module under `source/codes/` and dispatch to it in `Codes.encode`. Then: + - Add reference rows in `tools/gen_code_vectors.py` (zxing-cpp's writer, or segno for QR) and run `make codes`. + - Add `CODEDUMP` lines for seeded payloads in its test, so `tools/check_codes.py` decodes them in every test run. + - Add its zxing-cpp format to `tools/barcode_ref.py`. + + When decoding with zxing-cpp, restrict the format: by default it reads Code 39 as full-ASCII, which changes pairs such as "+S". diff --git a/docs/TESTING.md b/docs/TESTING.md index 593b120..29cec49 100644 --- a/docs/TESTING.md +++ b/docs/TESTING.md @@ -26,6 +26,16 @@ Test devices (`TEST_DEVICES`): Forerunner 255S (weakest: 218 px round MIP, butto ## Results +### M6a, 2026-10-20 (linear barcodes, in 0.6.0) + +Monkey C unit tests: 105 per device, with the checks of README 12.4. + +1. **Reference comparison.** 217 rows from zxing-cpp (`tools/gen_code_vectors.py`, `make codes`): fixed edge cases and seeded random payloads for every linear symbology. EAN-13, EAN-8, UPC-A, UPC-E, Code 39 (with and without the check character), ITF and Codabar match module for module. Code 128 matches in length. zxing-cpp 3's zint backend picks a different one of the equally short encodings; on 5,000 random strings the lengths were always equal. +2. **Decoding.** Every Code 128 reference row, plus 139 codes for seeded random payloads in all eight symbologies, is dumped by the test run. `tools/check_codes.py` renders each with its quiet zone at 1, 2 and 3 px per module and decodes it with zxing-cpp, on each test device: 169 codes, all decoded. +3. **Screenshots.** The UI flow opens the fixture's EAN-13 card. Its screenshot decodes to `5901234123457` on all seven watches, including the Forerunner 255S at 1 px per module. + +Validation messages are tested for every symbology: digits only, lengths, check digits (add, verify, fix, off), UPC-E number system and canonical zero suppression, ITF parity, Code 39 characters, non-ASCII Code 128 input, and Codabar start and stop characters. + ### M5, 2026-10-20 (version 0.5.0) Monkey C unit tests: 101 per device (29 new in `test/import/`): @@ -136,3 +146,4 @@ Things the simulator can't verify, done by you on the Forerunner 70. The checkli - [ ] M4: with "Debug: demo entries", check the list, a code, the countdown ring, HOTP "next", and the PIN keypad with your finger. Also check a wrong PIN (vibration) and the 30 s wait after five wrong PINs. - [ ] M4: check that leaving the app and coming back asks for the PIN again for the locked demo entry. Check that the glance in the glance loop shows the number of entries. - [ ] M5: in Garmin Connect, paste a few `otpauth://` links of test accounts (not your real ones) into the Import fields, turn "Import now" on and save. Check the result on the watch and in the Result field. Also check that the text fields are emptied afterwards: this answers part of the M1 question. +- [ ] M6a: with "Debug: demo entries", open "Gym card" (an EAN-13). Scan it with your phone's camera, or a shop scanner if you can, indoors and outdoors. Tell me whether it reads. |
