{"atom":"regression/batch11b-typed-blobs","family":"regression","slug":"batch11b-typed-blobs","header":{"atom":"regression/batch11b-typed-blobs","kind":"whole-program — a minimal repro, not yet reduced to an atom","source":"curated"},"axes":null,"cols":null,"engines":["rakudo-2026.07","rakupp-3.14.0"],"kinds":["ref","pp"],"defFrom":"rakupp:t/regression/batch11b-typed-blobs.raku","counts":{"a":1,"f":0,"d":0,"c":0,"r":0,"n":0},"files":["atoms/regression/batch11b-typed-blobs.grid"],"records":[["0001","","# Regression: batch 11b typed-blob cluster (Digest::SHA1 pipeline). Contract:\n# exit 0 + last line PASS.\nmy @fail;\n\n# 1. element-width typed blobs: blob32 stores 32-bit LE words\nmy $b = blob32.new(0x11223344, 5);\n@fail.push('blob32-elems') unless $b.elems == 2;\n@fail.push('blob32-index') unless $b[0] == 0x11223344;\n@fail.push('blob32-numify') unless $b == 2;           # .Int = element count\n@fail.push('blob32-list') unless $b.list eqv (0x11223344, 5);\n@fail.push('blob8-bytes') unless \"abc\".encode.elems == 3 && (8 * \"abc\".encode) == 24;\n\n# 2. @$blob and coerce to a native-int array\nmy uint32 @W = $b;\n@fail.push('coerce-array') unless @W[0] == 0x11223344;\n@fail.push('at-slip') unless (my @x = @$b).List eqv (0x11223344, 5);  # .List: the assignment yields an Array\n\n# 3. radix digit-list\n@fail.push('radix-list') unless :256[97, 98, 99, 128] == 0x61626380;\n@fail.push('radix-slip') unless ((97,98),(0,0)).map({ :256[|@^a] }).List eqv (0x6162, 0);\n\n# 4. colon-arg with a Z that's looser than comma\nmy $z = blob32.new: blob32.new(1,2) Z+ blob32.new(10,20);\n@fail.push('colon-Z') unless $z.list eqv (11, 22);\n\n# 5. ( expr; ) is the grouped value, not a 1-list\n@fail.push('semi-paren') unless (5;) === 5;\n@fail.push('semi-list') unless (1,2;3,4).elems == 2;   # a real semicolon list still lists\n\n# 6. native uint32 push wraparound\nmy uint32 @m;\n@m.push(0xFFFFFFFF + 5);\n@fail.push('uint32-wrap') unless @m[0] == 4;\n\n# 7. the payoff: byte-correct SHA1 if the module is available\nif try ::('Digest::SHA1::&sha1') {\n    my $d = ::('Digest::SHA1::&sha1')(\"abc\");\n    @fail.push('sha1-value') unless $d.list.map(*.fmt(\"%02x\")).join\n        eq 'a9993e364706816aba3e25717850c26c9cd0d89d';\n}\n\nif @fail { note \"FAILED: @fail[]\"; say 'FAIL' } else { say 'PASS' }","output PASS","a",["PASS","PASS"],0,[["budget","20s"]]]]}