log — validation proof

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

Validated 2026-10-25 · converter 3e3f18925

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

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

Verdicts

Test go test go2cs
TestAll pass pass
TestCallDepth pass pass
TestCallDepth/Default.Fatal pass pass
TestCallDepth/Default.Fatalf pass pass
TestCallDepth/Default.Fatalln pass pass
TestCallDepth/Default.Output pass pass
TestCallDepth/Default.Panic pass pass
TestCallDepth/Default.Panicf pass pass
TestCallDepth/Default.Panicln pass pass
TestCallDepth/Fatal pass pass
TestCallDepth/Fatalf pass pass
TestCallDepth/Fatalln pass pass
TestCallDepth/Output pass pass
TestCallDepth/Panic pass pass
TestCallDepth/Panicf pass pass
TestCallDepth/Panicln pass pass
TestDefault pass pass
TestDiscard pass fail (disclosed)
TestEmptyPrintCreatesLine pass pass
TestFlagAndPrefixSetting pass pass
TestNonNewLogger pass pass
TestOutput pass pass
TestOutputRace pass pass
TestUTCFlag 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
TestDiscard deferred At-most-one AllocsPerRun assert over l.Printf(“%s”, <102400-byte string>): Go’s single allocation is the variadic []any, and its func(b []byte) []byte closure over format/v does not escape Output, so Go keeps the closure off the heap. The converted call counts two objects per run: the Printf params copy (log.cs:289), Go’s own one allocation, and the “%s” format literal materialized per call (log_test.cs:239). Ꮡl.of(Logger.ᏑisDiscard) (log.cs:226) is cached per box and accessor (golib/ж.cs:206-210) and costs nothing; the display class and delegate the C# compiler emits for the closure are not counted, so the count is a lower bound.

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.