{"atom":"regression/doc-missing-methods","family":"regression","slug":"doc-missing-methods","header":{"atom":"regression/doc-missing-methods","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/doc-missing-methods.raku","counts":{"a":1,"f":0,"d":0,"c":0,"r":0,"n":0},"files":["atoms/regression/doc-missing-methods.grid"],"records":[["0001","","# Conformance: methods the documentation exercises that simply did not exist —\n# each was a flat \"No such method\" in the three-way sweep.\n#\n# Buf.splice is the interesting one: it mutates IN PLACE, and a Buf's bytes are a\n# plain std::string rather than a shared_ptr the way an Array's elements are, so\n# unlike Array.splice it cannot mutate through a copy. methodCall takes its\n# invocant BY VALUE, so it lives beside bufBitOp as a Value&-taking member and is\n# reached from the interpreter with the invocant's own slot.\n# Contract: exit 0 + last line PASS.\nuse v6.e.PREVIEW;   # Format is 6.e-only in Rakudo\nuse experimental :pack;\nmy @fail;\nsub check($got, $want, $what) { @fail.push(\"$what: got $got want $want\") unless $got eq $want }\n\nmy $p := Proc::Async.new: 'cat', 'some', 'files';\ncheck($p.command.gist, '(cat some files)', 'Proc::Async.command is its argv');\n\nmy $d = Format.new(\"%05d%3x:%s\");\ncheck($d.directives.gist, '(d x s)', 'Format.directives names each conversion');\ncheck(Format.new(\"100%%\").directives.gist, '()', 'a literal %% is not a directive');\n\nmy $b = Buf.new(1, 1, 2, 3, 5);\ncheck($b.splice(0, 3, <3 2 1>).gist, 'Buf:0x<01 01 02>', 'Buf.splice answers the removed bytes');\ncheck($b.raku, 'Buf.new(3,2,1,3,5)', 'and mutates the buffer in place');\n\nmy $b2 = Buf.new(1, 2, 3);\ncheck($b2.splice(1).gist, 'Buf:0x<02 03>', 'a bare offset splices to the end');\ncheck($b2.raku, 'Buf.new(1)', 'leaving the prefix');\n\ncheck(Blob.new(1..10).unpack(\"C*\").gist, '(1 2 3 4 5 6 7 8 9 10)', 'Blob.unpack C* is every byte');\ncheck(Blob.new(65, 66, 67).unpack(\"A3\").raku, '\"ABC\"', 'A takes a counted string');\ncheck(Blob.new(65, 66, 67).unpack(\"C1\").raku, '65', 'and a single result is the VALUE, not a 1-element list');\ncheck(Blob.new(65, 66, 67).unpack(\"C2\").raku, '(65, 66)', 'while two results are a List');\ncheck(Blob.new(1, 2, 3, 4).unpack(\"n*\").gist, '(258 772)', 'n is big-endian 16-bit');\n\nmy $repo = CompUnit::Repository::FileSystem.new(prefix => $*CWD);\ncheck($repo.files('bin/zef').head.<name> // \"Nada\", 'Nada',\n      'a FileSystem repo answers .files (empty — rakupp does not enumerate dists)');\n\n# An IO::Handle had no rendering of its own and dumped buffer/mode/path as a hash,\n# exactly like the Proc gist bug in issue #10.\nmy $tmp = $*TMPDIR.add(\"rakupp-fh-test\");\n$tmp.spurt: \"x\";\nmy $fh = $tmp.open;\ncheck($fh.Str, $tmp.Str, 'an IO::Handle Strs as its path');\ncheck($fh.gist, 'IO::Handle<\"' ~ $tmp.Str ~ '\".IO>(opened)', 'and gists as an IO::Handle');\n$fh.close;\n$tmp.unlink;\n\n# IO::Path::Parts is Positional as well as Associative, in DECLARATION order\nmy $parts = IO::Path::Parts.new('C:', '/some/dir', 'foo.txt');\ncheck($parts<volume>, 'C:', 'a part reads by name');\ncheck($parts[0].gist, 'volume => C:', 'and by position, as a Pair');\ncheck($parts[0].^name, 'Pair', 'which really is a Pair');\ncheck($parts[2].gist, 'basename => foo.txt', 'position follows declaration order');\n# NOT asserted: .list/.pairs/`for` on a Parts. Rakudo treats it as ONE item there\n# (`.list` is `(IO::Path::Parts.new(…),)`) while rakupp spreads it as a Hash — a\n# pre-existing divergence that needs the zen-slice `$x[]` semantics to close.\n\nif @fail { note \"FAILED: @fail.join('; ')\"; say 'FAIL' } else { say 'PASS' }","output PASS","a",["PASS","PASS"],0,[["budget","20s"]]]]}