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-08-25 · converter e2182a59e
8 matched · 1 disclosed — Go 1.23.12, windows/amd64, converted package
src/core/log.
Verdicts
| Test | go test |
go2cs |
|---|---|---|
TestAll |
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 the managed CLR provably cannot 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.
| Test | Class | Pinned reason |
|---|---|---|
TestDiscard |
alloc-profile |
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’s escape analysis keeps the closure off the heap entirely. The converted call must heap-allocate what Go stack-allocates — the params array, the display class the C# compiler emits for the same closure, and its delegate — measured 3 golib-site allocations per run against Go’s 1, and that figure is a LOWER BOUND (go2cs’s counter covers golib’s sites, not compiler-emitted or BCL allocations). Same shape as bufio’s TestReadStringAllocs: the count is comparable, it is WHERE the allocations live that differs |
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.
- BenchmarkConcurrent (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkDiscard (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkItoa (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPrintln (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkPrintlnNoFlags (benchmark): benchmark execution is deferred to Phase 4D
- ExampleLogger (example): example execution is deferred to Phase 4D
- ExampleLogger_Output (example): example execution is deferred to Phase 4D