{
  "meta": {
    "title": "G-Warp GR1 machine-readable parity fixtures",
    "author": "Grok",
    "date": "2026-10-18",
    "updated": "2026-10-18 GR1b: T043 fix + T100-T129",
    "format": "G-Warp stack JSON (hat + stack)",
    "evidence": "SOURCE-CONFIRMED vs scratch-vm develop; G-Warp runtime NOT TESTED",
    "count": 60,
    "sourcesFile": "grok/FIXTURE-SOURCES.txt",
    "note_T043": "repeat uses Math.round (control.js:54), not floor; 2.7 runs 3 times"
  },
  "fixtures": [
    {"id": "T002", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "round", "num": -2.5}}]}, "expect": {"say": "-2"}, "source": "scratch3_operators.js:127 Math.round"},
    {"id": "T003", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "round", "num": 2.5}}]}, "expect": {"say": "3"}, "source": "scratch3_operators.js:127"},
    {"id": "T005", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "mod", "num1": -10, "num2": 3}}]}, "expect": {"say": "2"}, "source": "scratch3_operators.js:118 floored mod"},
    {"id": "T006", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "mod", "num1": 10, "num2": -3}}]}, "expect": {"say": "-2"}, "source": "scratch3_operators.js:118"},
    {"id": "T007", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "equals", "a": "10", "b": 10}}]}, "expect": {"say": "true"}, "source": "cast.js:121"},
    {"id": "T008", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "equals", "a": "10", "b": "10.0"}}]}, "expect": {"say": "true"}, "source": "cast.js:121"},
    {"id": "T009", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "equals", "a": "abc", "b": "ABC"}}]}, "expect": {"say": "true"}, "source": "cast.js:129-139"},
    {"id": "T014", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "contains", "string1": "Hello", "string2": "hello"}}]}, "expect": {"say": "true"}, "source": "scratch3_operators.js:111"},
    {"id": "T001", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "add", "num1": 0.1, "num2": 0.2}}]}, "expect": {"say": "0.30000000000000004"}, "source": "scratch3_operators.js:40"},
    {"id": "T004", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "mod", "num1": 10, "num2": 3}}]}, "expect": {"say": "1"}, "source": "scratch3_operators.js:118"},
    {"id": "T010", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "join", "string1": "", "string2": ""}}]}, "expect": {"say": ""}, "source": "scratch3_operators.js:93"},
    {"id": "T011", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "letter_of", "letter": 0, "string": "hi"}}]}, "expect": {"say": ""}, "source": "scratch3_operators.js:97"},
    {"id": "T012", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "letter_of", "letter": 1, "string": "hi"}}]}, "expect": {"say": "h"}, "source": "scratch3_operators.js:97"},
    {"id": "T013", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "length_of", "string": ""}}]}, "expect": {"say": "0"}, "source": "scratch3_operators.js:107"},
    {"id": "T015", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "not", "operand": {"type": "equals", "a": 1, "b": 2}}}]}, "expect": {"say": "true"}, "source": "scratch3_operators.js:76"},
    {"id": "T018", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "abs", "num": -7}}]}, "expect": {"say": "7"}, "source": "scratch3_operators.js:131"},
    {"id": "T019a", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "floor", "num": 3.9}}]}, "expect": {"say": "3"}, "source": "scratch3_operators.js:136"},
    {"id": "T019b", "setup": "empty sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "ceiling", "num": 3.1}}]}, "expect": {"say": "4"}, "source": "scratch3_operators.js:137"},
    {"id": "T021", "setup": "list L=[a]", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "add_to_list", "list": "L", "item": "a"}, {"type": "say", "value": {"type": "item_of_list", "list": "L", "index": 0}}]}, "expect": {"say": "", "lists": {"L": ["a"]}}, "source": "cast.js:193; data.js:187"},
    {"id": "T022", "setup": "list L=[a,b]", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "add_to_list", "list": "L", "item": "a"}, {"type": "add_to_list", "list": "L", "item": "b"}, {"type": "say", "value": {"type": "item_of_list", "list": "L", "index": 2}}]}, "expect": {"say": "b", "lists": {"L": ["a", "b"]}}, "source": "data.js:187"},
    {"id": "T023", "setup": "list L=[a]", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "add_to_list", "list": "L", "item": "a"}, {"type": "say", "value": {"type": "item_of_list", "list": "L", "index": 99}}]}, "expect": {"say": ""}, "source": "cast.js toListIndex"},
    {"id": "T024", "setup": "list L=[b]", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "add_to_list", "list": "L", "item": "b"}, {"type": "insert_at_list", "list": "L", "index": 0, "item": "a"}, {"type": "say", "value": {"type": "item_of_list", "list": "L", "index": 1}}]}, "expect": {"say": "b", "lists": {"L": ["b"]}}, "source": "data.js:156"},
    {"id": "T028", "setup": "list L=[10]", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "add_to_list", "list": "L", "item": "10"}, {"type": "say", "value": {"type": "list_contains", "list": "L", "item": 10}}]}, "expect": {"say": "true"}, "source": "data.js:231"},
    {"id": "T026", "setup": "list L empty", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "say", "value": {"type": "length_of_list", "list": "L"}}]}, "expect": {"say": "0", "lists": {"L": []}}, "source": "data.js:225"},
    {"id": "T075", "setup": "list L empty", "blocks": {"hat": "when_flag", "stack": [{"type": "delete_all_of_list", "list": "L"}, {"type": "say", "value": {"type": "item_of_list", "list": "L", "index": 1}}]}, "expect": {"say": ""}, "source": "data.js:187"},
    {"id": "T029", "setup": "var V", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "V", "value": 10}, {"type": "say", "value": {"type": "join", "string1": {"type": "var", "name": "V"}, "string2": "!"}}]}, "expect": {"say": "10!", "variables": {"V": 10}}, "source": "operators join:93"},
    {"id": "T042", "setup": "var C", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "C", "value": 0}, {"type": "repeat", "times": 0, "body": [{"type": "change_var", "name": "C", "by": 1}]}, {"type": "say", "value": {"type": "var", "name": "C"}}]}, "expect": {"say": "0", "variables": {"C": 0}}, "source": "control.js:53"},
    {"id": "T043", "setup": "var C", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "C", "value": 0}, {"type": "repeat", "times": 2.7, "body": [{"type": "change_var", "name": "C", "by": 1}]}, {"type": "say", "value": {"type": "var", "name": "C"}}]}, "expect": {"say": "3", "variables": {"C": 3}}, "source": "control.js:54 Math.round(2.7)===3", "notes": "CORRECTED: not floor"},
    {"id": "T049", "setup": "empty", "blocks": {"hat": "when_flag", "stack": [{"type": "if_else", "condition": {"type": "equals", "a": 1, "b": 2}, "then": [{"type": "say", "value": "a"}], "else": [{"type": "say", "value": "b"}]}]}, "expect": {"say": "b"}, "source": "control.js:131"},
    {"id": "T017", "setup": "random", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "r", "value": {"type": "random", "from": 1, "to": 3}}, {"type": "say", "value": {"type": "var", "name": "r"}}]}, "expect": {"say": {"oneOf": ["1", "2", "3"]}}, "source": "operators.js:80"},
    {"id": "T100", "setup": "dir 90", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 90}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "90"}, "source": "motion.js:116; setDirection wrapClamp -179..180"},
    {"id": "T101", "setup": "point 270", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 270}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "-90"}, "source": "wrapClamp(270,-179,180)=-90"},
    {"id": "T102", "setup": "turn right 180 from 90", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 90}, {"type": "turn_right", "degrees": 180}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "-90"}, "source": "motion.js:106"},
    {"id": "T103", "setup": "turn left 90 from 90", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 90}, {"type": "turn_left", "degrees": 90}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "0"}, "source": "motion.js:111"},
    {"id": "T104", "setup": "go to 10,20", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 10, "y": 20}, {"type": "say", "value": {"type": "x_position"}}]}, "expect": {"say": "10"}, "source": "motion.js:72"},
    {"id": "T105", "setup": "change x +5 twice", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 0, "y": 0}, {"type": "change_x", "dx": 5}, {"type": "change_x", "dx": 5}, {"type": "say", "value": {"type": "x_position"}}]}, "expect": {"say": "10"}, "source": "motion.js:246"},
    {"id": "T106", "setup": "set y -40", "blocks": {"hat": "when_flag", "stack": [{"type": "set_y", "y": -40}, {"type": "say", "value": {"type": "y_position"}}]}, "expect": {"say": "-40"}, "source": "motion.js:261"},
    {"id": "T107", "setup": "move 10 steps dir 90", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 0, "y": 0}, {"type": "point_in_direction", "direction": 90}, {"type": "move_steps", "steps": 10}, {"type": "say", "value": {"type": "x_position"}}]}, "expect": {"say": "10"}, "source": "motion.js:64"},
    {"id": "T108", "setup": "move 10 steps dir 0", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 0, "y": 0}, {"type": "point_in_direction", "direction": 0}, {"type": "move_steps", "steps": 10}, {"type": "say", "value": {"type": "y_position"}}]}, "expect": {"say": "10"}, "source": "motion.js:64"},
    {"id": "T109", "setup": "non-finite direction ignored", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 90}, {"type": "point_in_direction", "direction": "NaN"}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "90"}, "source": "rendered-target.js:317 !isFinite return"},
    {"id": "T110", "setup": "limitPrecision", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 1.00000000001, "y": 0}, {"type": "say", "value": {"type": "x_position"}}]}, "expect": {"say": "1"}, "source": "motion.js:279 limitPrecision"},
    {"id": "T111", "setup": "timer", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "timer"}}]}, "expect": {"say": {"type": "number_ge", "value": 0}}, "source": "sensing.js:213"},
    {"id": "T112", "setup": "key space not held", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "key_pressed", "key": "space"}}]}, "expect": {"say": "false"}, "source": "sensing.js keyPressed"},
    {"id": "T113", "setup": "mouse x is number", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "mouse_x"}}]}, "expect": {"notes": "numeric; depends on pointer"}, "source": "sensing.js:221"},
    {"id": "T114", "setup": "touching edge at 0,0", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 0, "y": 0}, {"type": "say", "value": {"type": "touching", "object": "_edge_"}}]}, "expect": {"say": "false", "notes": "typical default costume"}, "source": "sensing.js:171"},
    {"id": "T115", "setup": "distance to mouse", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "distance_to", "object": "_mouse_"}}]}, "expect": {"notes": "number; mouse-dependent"}, "source": "sensing.js distance"},
    {"id": "T116", "setup": "current year", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "current", "menu": "year"}}]}, "expect": {"say": {"type": "number_ge", "value": 2020}}, "source": "sensing.js current"},
    {"id": "T117", "setup": "days since 2000", "blocks": {"hat": "when_flag", "stack": [{"type": "say", "value": {"type": "days_since_2000"}}]}, "expect": {"say": {"type": "number_gt", "value": 0}}, "source": "sensing.js:252"},
    {"id": "T118", "setup": "broadcast", "blocks": {"hat": "when_flag", "stack": [{"type": "broadcast", "message": "ping"}]}, "expect": {"notes": "starts when-receive hats"}, "source": "event.js:81"},
    {"id": "T119", "setup": "broadcast and wait", "blocks": {"hat": "when_flag", "stack": [{"type": "broadcast_and_wait", "message": "ping"}]}, "expect": {"notes": "waits for receivers"}, "source": "event.js:92"},
    {"id": "T120", "setup": "create clone myself", "blocks": {"hat": "when_flag", "stack": [{"type": "create_clone", "option": "_myself_"}]}, "expect": {"notes": "+1 clone if under 300"}, "source": "control.js:152; runtime MAX_CLONES"},
    {"id": "T121", "setup": "301 clones", "blocks": {"hat": "when_flag", "stack": [{"type": "repeat", "times": 301, "body": [{"type": "create_clone", "option": "_myself_"}]}]}, "expect": {"cloneCount_le": 300}, "source": "runtime.js MAX_CLONES=300"},
    {"id": "T122", "setup": "stop other scripts", "blocks": {"hat": "when_flag", "stack": [{"type": "stop", "option": "other scripts in sprite"}]}, "expect": {"notes": "stops siblings"}, "source": "control.js:140"},
    {"id": "T123", "setup": "stop all", "blocks": {"hat": "when_flag", "stack": [{"type": "stop", "option": "all"}]}, "expect": {"notes": "runtime.stopAll"}, "source": "control.js:140"},
    {"id": "T124", "setup": "repeat 2.5", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "C", "value": 0}, {"type": "repeat", "times": 2.5, "body": [{"type": "change_var", "name": "C", "by": 1}]}, {"type": "say", "value": {"type": "var", "name": "C"}}]}, "expect": {"say": "2"}, "source": "Math.round(2.5)===2"},
    {"id": "T125", "setup": "repeat 3.5", "blocks": {"hat": "when_flag", "stack": [{"type": "set_var", "name": "C", "value": 0}, {"type": "repeat", "times": 3.5, "body": [{"type": "change_var", "name": "C", "by": 1}]}, {"type": "say", "value": {"type": "var", "name": "C"}}]}, "expect": {"say": "4"}, "source": "Math.round(3.5)===4"},
    {"id": "T126", "setup": "direction 540", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": 540}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "180"}, "source": "wrapClamp(540,-179,180)"},
    {"id": "T127", "setup": "direction -180", "blocks": {"hat": "when_flag", "stack": [{"type": "point_in_direction", "direction": -180}, {"type": "say", "value": {"type": "direction"}}]}, "expect": {"say": "180"}, "source": "wrapClamp(-180,-179,180)"},
    {"id": "T128", "setup": "change y -5 twice", "blocks": {"hat": "when_flag", "stack": [{"type": "go_to_xy", "x": 0, "y": 0}, {"type": "change_y", "dy": -5}, {"type": "change_y", "dy": -5}, {"type": "say", "value": {"type": "y_position"}}]}, "expect": {"say": "-10"}, "source": "motion.js:256"},
    {"id": "T129", "setup": "clone missing sprite", "blocks": {"hat": "when_flag", "stack": [{"type": "create_clone", "option": "NoSuchSprite"}]}, "expect": {"notes": "no clone"}, "source": "control.js:160-162 null target"}
  ]
}
