fmt — validation proof

Go’s own fmt 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 fmt row in Validated Test Packages.

Validated 2026-09-23 · converter f95f88866

62 matched · 1 disclosed — Go 1.24.13, windows/amd64, converted package src/core/fmt.

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

Verdicts

Test go test go2cs
TestAppend pass pass
TestAppendf pass pass
TestAppendln pass pass
TestBadVerbRecursion pass pass
TestBlank pass pass
TestBlankln pass pass
TestComplexFormatting pass pass
TestCountMallocs pass fail (disclosed)
TestEOF pass pass
TestEOFAllTypes pass pass
TestEOFAtEndOfInput pass pass
TestEmptyMap pass pass
TestErrorf pass pass
TestFlagParser pass pass
TestFmtInterface pass pass
TestFormatString pass pass
TestFormatterFlags pass pass
TestFormatterPrintln pass pass
TestHexByte pass pass
TestHexBytes pass pass
TestInf pass pass
TestIsSpace pass pass
TestLineByLineFscanf pass pass
TestMapPrinter pass pass
TestMultiLine pass pass
TestNaN pass pass
TestNilDoesNotBecomeTyped pass pass
TestPanics pass pass
TestParsenum pass pass
TestReorder pass pass
TestScan pass pass
TestScan/DataErrReader pass pass
TestScan/OneByteReader pass pass
TestScan/ReaderOnly pass pass
TestScan/StringReader pass pass
TestScanEmpty pass pass
TestScanInts pass pass
TestScanMultiple pass pass
TestScanNewlinesAreSpaces pass pass
TestScanNotPointer pass pass
TestScanOverflow pass pass
TestScanStateCount pass pass
TestScanf pass pass
TestScanfMulti pass pass
TestScanfMulti/DataErrReader pass pass
TestScanfMulti/OneByteReader pass pass
TestScanfMulti/ReaderOnly pass pass
TestScanfMulti/StringReader pass pass
TestScanfNewlineMatchFormat pass pass
TestScanln pass pass
TestScanln/DataErrReader pass pass
TestScanln/OneByteReader pass pass
TestScanln/ReaderOnly pass pass
TestScanln/StringReader pass pass
TestScanlnNewlinesTerminate pass pass
TestScanlnNoNewline pass pass
TestScanlnWithMiddleNewline pass pass
TestSlicePrinter pass pass
TestSprintf pass pass
TestStringer pass pass
TestStructPrinter pass pass
TestUnreadRuneWithBufio pass pass
TestWidthAndPrecision 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
TestCountMallocs deferred An AllocsPerRun family over 16 Sprintf/Fprintf legs, each bounded by Go’s own mallocTest count (0 to 4). 15 of the 16 legs exceed their bound in the converted run; Sprintf(“”) (no arguments) is the one that passes. DEFERRED, not alloc-count-semantics: the run’s unit note reads counted ... go2cs-runtime object allocations ... an allocation COUNT per run – Go’s own unit. ONE mechanism is named and read at the 1.24.13 hop, and it is paid by every leg with arguments: the variadic pack. The call site is C# 13 params Span<any> (the compiler’s stack pack, like Go’s non-escaping …any backing array), and Sprintf/Fprintf’s first act, aʗp.slice(), copies it to the heap (golib slice.cs slice<T>(this Span<T>) -> AllocationCounter.CopyOf) – one charged array per call where Go allocates none. That it is the no-argument leg that passes is consistent with it. The REST of each leg’s surplus is NOT yet attributed (Sprintf(“xxx”) has no pack and reads 2 against 1), so this entry is deferred on a partially named mechanism and says so.

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.