strings — validation proof
Go’s own strings 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 strings row in
Validated Test Packages.
Validated 2026-08-04 · converter f6e9c0cf0
68 matched · 4 disclosed — Go 1.23.1, windows/amd64, converted package
src/core/strings.
Verdicts
| Test | go test |
go2cs |
|---|---|---|
TestBuilder |
pass | pass |
TestBuilderAllocs |
pass | fail (disclosed) |
TestBuilderCopyPanic |
pass | pass |
TestBuilderGrow |
pass | fail (disclosed) |
TestBuilderGrowSizeclasses |
pass | fail (disclosed) |
TestBuilderReset |
pass | pass |
TestBuilderString |
pass | pass |
TestBuilderWrite2 |
pass | pass |
TestBuilderWrite2/Write |
pass | pass |
TestBuilderWrite2/WriteRune |
pass | pass |
TestBuilderWrite2/WriteRuneWide |
pass | pass |
TestBuilderWrite2/WriteString |
pass | pass |
TestBuilderWriteByte |
pass | pass |
TestBuilderWriteInvalidRune |
pass | pass |
TestCaseConsistency |
pass | pass |
TestClone |
pass | pass |
TestCompare |
pass | pass |
TestCompareIdenticalString |
pass | pass |
TestCompareStrings |
pass | pass |
TestContains |
pass | pass |
TestContainsAny |
pass | pass |
TestContainsFunc |
pass | pass |
TestContainsRune |
pass | pass |
TestCount |
pass | pass |
TestCut |
pass | pass |
TestCutPrefix |
pass | pass |
TestCutSuffix |
pass | pass |
TestEmptyReaderConcurrent |
pass | pass |
TestEqualFold |
pass | pass |
TestFields |
pass | pass |
TestFieldsFunc |
pass | pass |
TestFinderCreation |
pass | pass |
TestFinderNext |
pass | pass |
TestGenericTrieBuilding |
pass | pass |
TestIndex |
pass | pass |
TestIndexAny |
pass | pass |
TestIndexByte |
pass | pass |
TestIndexFunc |
pass | pass |
TestIndexRandom |
pass | pass |
TestIndexRune |
pass | fail (disclosed) |
TestLastIndex |
pass | pass |
TestLastIndexAny |
pass | pass |
TestLastIndexByte |
pass | pass |
TestMap |
pass | pass |
TestPickAlgorithm |
pass | pass |
TestReadAfterBigSeek |
pass | pass |
TestReadByte |
pass | pass |
TestReadRune |
pass | pass |
TestReader |
pass | pass |
TestReaderAt |
pass | pass |
TestReaderAtConcurrent |
pass | pass |
TestReaderLenSize |
pass | pass |
TestReaderReset |
pass | pass |
TestReaderZero |
pass | pass |
TestRepeat |
pass | pass |
TestRepeatCatchesOverflow |
pass | pass |
TestReplace |
pass | pass |
TestReplacer |
pass | pass |
TestRunes |
pass | pass |
TestSpecialCase |
pass | pass |
TestSplit |
pass | pass |
TestSplitAfter |
pass | pass |
TestTitle |
pass | pass |
TestToLower |
pass | pass |
TestToUpper |
pass | pass |
TestToValidUTF8 |
pass | pass |
TestTrim |
pass | pass |
TestTrimFunc |
pass | pass |
TestTrimSpace |
pass | pass |
TestUnreadRuneError |
pass | pass |
TestWriteStringError |
pass | pass |
TestWriteTo |
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 |
|---|---|---|
TestBuilderAllocs |
alloc-count-semantics |
exact-count AllocsPerRun assert (want 1): the managed shim is deliberately byte-derived (no CLR malloc counter), so a nonzero count assert can never agree — see the AllocsPerRun entry in docs/ConversionStrategies-Reference.md |
TestBuilderGrow |
alloc-count-semantics |
exact-count AllocsPerRun asserts (want 1 per growLen>0 leg, want 0 for growLen=0): the byte-derived shim can never agree on a nonzero count, and the growLen=0 leg’s addressed Builder heap-boxes per run where Go’s escape analysis stack-allocates |
TestBuilderGrowSizeclasses |
alloc-count-semantics |
count-bound AllocsPerRun assert (want <= 1): the byte-derived shim reports allocated bytes, so the managed Builder path can never satisfy the count bound |
TestIndexRune |
alloc-profile |
want-zero AllocsPerRun assert: IndexRune’s Index(s, string(r)) materializes a byte[] in the managed model where Go uses a 4-byte stack buffer (runtime.intstring); the index-semantics legs all pass |
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.
- BenchmarkBuildString_Builder (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkBuildString_ByteBuffer (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkBuildString_WriteString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteByteMap (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteByteMatch (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteByteNoMatch (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteByteReplaces (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteReplacerWriteString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteStringMatch (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkByteStringReplacerWriteString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkClone (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountByte (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountHard1 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountHard2 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountHard3 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountTorture (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkCountTortureOverlapping (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkEqualFold (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkFields (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkFieldsFunc (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkGenericMatch1 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkGenericMatch2 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkGenericNoMatch (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkHTMLEscapeNew (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkHTMLEscapeOld (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndex (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexAnyASCII (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexAnyUTF8 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexByte (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexHard1 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexHard2 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexHard3 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexHard4 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexPeriodic (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexRune (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexRuneFastPath (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexRuneLongString (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkIndexTorture (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkJoin (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndex (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndexAnyASCII (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndexAnyUTF8 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndexHard1 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndexHard2 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkLastIndexHard3 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMap (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkMapNoChanges (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRepeat (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRepeatLarge (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkRepeatSpaces (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkReplaceAll (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSingleLongSuffixFail (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSingleMatch (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSingleMaxSkipping (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSplitEmptySeparator (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSplitMultiByteSeparator (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSplitNMultiByteSeparator (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSplitNSingleByteSeparator (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkSplitSingleByteSeparator (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkToLower (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkToUpper (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkToValidUTF8 (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkTrim (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkTrimASCII (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkTrimByte (benchmark): benchmark execution is deferred to Phase 4D
- BenchmarkTrimSpace (benchmark): benchmark execution is deferred to Phase 4D
- ExampleBuilder (example): example execution is deferred to Phase 4D
- ExampleClone (example): example execution is deferred to Phase 4D
- ExampleCompare (example): example execution is deferred to Phase 4D
- ExampleContains (example): example execution is deferred to Phase 4D
- ExampleContainsAny (example): example execution is deferred to Phase 4D
- ExampleContainsFunc (example): example execution is deferred to Phase 4D
- ExampleContainsRune (example): example execution is deferred to Phase 4D
- ExampleCount (example): example execution is deferred to Phase 4D
- ExampleCut (example): example execution is deferred to Phase 4D
- ExampleCutPrefix (example): example execution is deferred to Phase 4D
- ExampleCutSuffix (example): example execution is deferred to Phase 4D
- ExampleEqualFold (example): example execution is deferred to Phase 4D
- ExampleFields (example): example execution is deferred to Phase 4D
- ExampleFieldsFunc (example): example execution is deferred to Phase 4D
- ExampleHasPrefix (example): example execution is deferred to Phase 4D
- ExampleHasSuffix (example): example execution is deferred to Phase 4D
- ExampleIndex (example): example execution is deferred to Phase 4D
- ExampleIndexAny (example): example execution is deferred to Phase 4D
- ExampleIndexByte (example): example execution is deferred to Phase 4D
- ExampleIndexFunc (example): example execution is deferred to Phase 4D
- ExampleIndexRune (example): example execution is deferred to Phase 4D
- ExampleJoin (example): example execution is deferred to Phase 4D
- ExampleLastIndex (example): example execution is deferred to Phase 4D
- ExampleLastIndexAny (example): example execution is deferred to Phase 4D
- ExampleLastIndexByte (example): example execution is deferred to Phase 4D
- ExampleLastIndexFunc (example): example execution is deferred to Phase 4D
- ExampleMap (example): example execution is deferred to Phase 4D
- ExampleNewReplacer (example): example execution is deferred to Phase 4D
- ExampleRepeat (example): example execution is deferred to Phase 4D
- ExampleReplace (example): example execution is deferred to Phase 4D
- ExampleReplaceAll (example): example execution is deferred to Phase 4D
- ExampleSplit (example): example execution is deferred to Phase 4D
- ExampleSplitAfter (example): example execution is deferred to Phase 4D
- ExampleSplitAfterN (example): example execution is deferred to Phase 4D
- ExampleSplitN (example): example execution is deferred to Phase 4D
- ExampleTitle (example): example execution is deferred to Phase 4D
- ExampleToLower (example): example execution is deferred to Phase 4D
- ExampleToLowerSpecial (example): example execution is deferred to Phase 4D
- ExampleToTitle (example): example execution is deferred to Phase 4D
- ExampleToTitleSpecial (example): example execution is deferred to Phase 4D
- ExampleToUpper (example): example execution is deferred to Phase 4D
- ExampleToUpperSpecial (example): example execution is deferred to Phase 4D
- ExampleToValidUTF8 (example): example execution is deferred to Phase 4D
- ExampleTrim (example): example execution is deferred to Phase 4D
- ExampleTrimFunc (example): example execution is deferred to Phase 4D
- ExampleTrimLeft (example): example execution is deferred to Phase 4D
- ExampleTrimLeftFunc (example): example execution is deferred to Phase 4D
- ExampleTrimPrefix (example): example execution is deferred to Phase 4D
- ExampleTrimRight (example): example execution is deferred to Phase 4D
- ExampleTrimRightFunc (example): example execution is deferred to Phase 4D
- ExampleTrimSpace (example): example execution is deferred to Phase 4D
- ExampleTrimSuffix (example): example execution is deferred to Phase 4D