From 6215b1177e377b512aaa1296faa6311f809135f2 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Mon, 19 Oct 2026 06:18:49 +0100 Subject: 140's 8, box layout, written in aup with no new opcode (aup's examples/layout.aup: a subset of CSS Flexbox 1 written down first, one line, row or column, padding, gap, six justify-content, four align-items, grow and shrink with 9.7's loop, cross sizes stretched, nothing sized by content): 2,000 random trees (29,388 nodes; 7,659 items frozen at their padding by the loop) are Taffy 0.15's within 0.01 (layout_taffy, built by cargo; the worst 8.3e-5) and layout.py's bit for bit on the three paths, the paths the same; the single-pass subset first tried refused 66% of trees, so the loop came in; Taffy given min sizes equal to the padding (given 0 it floors at 0 while resolving lengths, where 9.7 floors the content box), the reference adding from the left (sum compensates since Python 3.12); module_specs in make check: 100 trees (tests/specs/layout); bars: 116 lines against Python's 54, 4,754 ns a node, Taffy's 644 (7.4x), pure Python 5,396 (Pure 1.14x faster), 1,494 instructions a node (9.7's loop 44%); four frictions; aup's rows read by position no longer copy (99,067 ns a node before); the suite table's row 8; CHECKPOINT's direction row --- tests/check.py | 25 ++++++++++++++++++++++++- tests/specs/layout/README.md | 7 +++++++ tests/specs/layout/trees.bin | Bin 0 -> 218992 bytes 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 tests/specs/layout/README.md create mode 100644 tests/specs/layout/trees.bin (limited to 'tests') diff --git a/tests/check.py b/tests/check.py index 5574b80..dd64e03 100644 --- a/tests/check.py +++ b/tests/check.py @@ -1738,7 +1738,9 @@ def module_specs(aup, pure, work): at a time, cut anywhere, to the same requests; line breaking (UAX #14) by its examples/linebreak.aup on LineBreakTest.txt's lines (tests/specs/linebreak); RFC 6298's retransmission timer by its examples/rto.aup on a scenario's - events (tests/specs/rto), the model's state after each.""" + events (tests/specs/rto), the model's state after each; box layout (a + subset of CSS Flexbox 1) by its examples/layout.aup on trees + (tests/specs/layout), each box bit for bit.""" import hashlib import os import random @@ -1988,6 +1990,27 @@ def module_specs(aup, pure, work): len(s['retransmits'])] == want, ('rto', period, want) events += len(out) runs['rto'] = {'scenarios': 2, 'events': events} + # Box layout (a subset of CSS Flexbox 1, its examples/layout.aup): trees as layout.py lays them out (tests/specs/layout, + # Taffy's within 0.01), a tree a message of its nodes in preorder, its boxes bit for bit on the three paths. + program = work / 'layout.pmod' + compile_module(aup, EXAMPLES / 'layout.aup', program) + given, trees = (pure / 'tests/specs/layout/trees.bin').read_bytes(), [] + while given: + n = struct.unpack_from('