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.
- BenchmarkFprintInt (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkFprintIntNoAlloc (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkFprintfBytes (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkManyArgs (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkScanInts (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkScanRecursiveInt (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkScanRecursiveIntReaderWrapper (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfBoolean (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfBytes (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfComplex (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfEmpty (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfFloat (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfHexBytes (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfHexString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfInt (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfIntInt (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfPadding (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfPrefixedInt (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfQuoteString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfSlowParsingPath (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfStringer (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfStructure (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfTruncateBytes (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSprintfTruncateString (benchmark): benchmark execution is deferred to Phase 4D
- ExampleErrorf (example): example execution is deferred to Phase 4D
- ExampleFprint (example): example execution is deferred to Phase 4D
- ExampleFprintf (example): example execution is deferred to Phase 4D
- ExampleFprintln (example): example execution is deferred to Phase 4D
- ExampleFscanf (example): example execution is deferred to Phase 4D
- ExampleFscanln (example): example execution is deferred to Phase 4D
- ExampleGoStringer (example): example execution is deferred to Phase 4D
- ExamplePrint (example): example execution is deferred to Phase 4D
- ExamplePrintf (example): example execution is deferred to Phase 4D
- ExamplePrintln (example): example execution is deferred to Phase 4D
- ExampleSprint (example): example execution is deferred to Phase 4D
- ExampleSprintf (example): example execution is deferred to Phase 4D
- ExampleSprintln (example): example execution is deferred to Phase 4D
- ExampleSscanf (example): example execution is deferred to Phase 4D
- ExampleStringer (example): example execution is deferred to Phase 4D
- Example_formats (example): example execution is deferred to Phase 4D
- Example_printers (example): example execution is deferred to Phase 4D