mime — validation proof

Go’s own mime test suite, converted to C# by go2cs, built against the converted standard library, run under the Go-semantics test host, and compared verdict for verdict against a clean go test -json baseline of the same sources. This page is generated by the converter from that comparison — it is the evidence behind the mime row in Validated Test Packages.

Validated 2026-10-25 · converter 3e3f18925

17 matched · 1 disclosed — Go 1.26.10, windows/amd64, converted package src/core/mime.

Measured at Release (tiered JIT off), oracle go version go1.26.10 windows/amd64.

Verdicts

Test go test go2cs
TestCharsetDecoder pass pass
TestCharsetDecoderError pass pass
TestConsumeMediaParam pass pass
TestConsumeToken pass pass
TestConsumeValue pass pass
TestDecodeHeader pass pass
TestDecodeWord pass pass
TestEncodeWord pass pass
TestEncodedWordLength pass pass
TestExtensionsByType pass pass
TestExtensionsByType2 pass pass
TestFormatMediaType pass pass
TestLookupMallocs pass fail (disclosed)
TestParseMediaType pass pass
TestParseMediaTypeBogus pass pass
TestTypeByExtension pass pass
TestTypeByExtensionCase pass pass
TestTypeByExtension_LocalData pass pass

Disclosed divergences

A disclosed divergence is a specific Go assertion this conversion does not satisfy — not a skipped test and not a tolerance. Each one is pinned by exact failure signature in the package’s hand-owned go2cs_test_disclosures.json; a disclosed test that fails any other way is still a hard mismatch.

The Class column says which kind each one is: a deferred entry is an assertion the managed CLR can meet, pinned against the named plan that will retire it; every other class is one it provably cannot satisfy.

Test Class Pinned reason
TestLookupMallocs deferred want-zero AllocsPerRun assert: Go’s TypeByExtension lookup runs allocation-free, while the converted lookup counts 3 golib-site objects per run on windows and linux, on the case-insensitive miss: the 10-byte working buffer array<byte> buf = new(10) (mime/type.cs:123), the (@string)lower probe’s string conversion (:140), and a third object not yet attributed (the sync.Map Load path is the candidate). Boxing is not counted, so the sync.Map probe’s boxing is not part of the figure. Deferred, with no floor: both attributed objects are non-escaping storage that planned work removes; the entry retires only at zero bytes.

Excluded declarations

Declarations filtered from both sides of the comparison, and therefore not claimed above: Benchmark, Fuzz and Example declarations the converted host does not execute, plus any test requiring a capability the managed runtime does not provide — a testing member the host has not implemented, or a platform behavior it provably cannot reproduce. Each is named with the capability it needs.