github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/ir/func_test.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package ir 6 7 import ( 8 "testing" 9 ) 10 11 func TestSplitPkg(t *testing.T) { 12 tests := []struct { 13 in string 14 pkg string 15 sym string 16 }{ 17 { 18 in: "foo.Bar", 19 pkg: "foo", 20 sym: "Bar", 21 }, 22 { 23 in: "foo/bar.Baz", 24 pkg: "foo/bar", 25 sym: "Baz", 26 }, 27 { 28 in: "memeqbody", 29 pkg: "", 30 sym: "memeqbody", 31 }, 32 { 33 in: `example%2ecom.Bar`, 34 pkg: `example%2ecom`, 35 sym: "Bar", 36 }, 37 { 38 // Not a real generated symbol name, but easier to catch the general parameter form. 39 in: `foo.Bar[sync/atomic.Uint64]`, 40 pkg: `foo`, 41 sym: "Bar[sync/atomic.Uint64]", 42 }, 43 { 44 in: `example%2ecom.Bar[sync/atomic.Uint64]`, 45 pkg: `example%2ecom`, 46 sym: "Bar[sync/atomic.Uint64]", 47 }, 48 { 49 in: `gopkg.in/yaml%2ev3.Bar[sync/atomic.Uint64]`, 50 pkg: `gopkg.in/yaml%2ev3`, 51 sym: "Bar[sync/atomic.Uint64]", 52 }, 53 { 54 // This one is a real symbol name. 55 in: `foo.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`, 56 pkg: `foo`, 57 sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]", 58 }, 59 { 60 in: `example%2ecom.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`, 61 pkg: `example%2ecom`, 62 sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]", 63 }, 64 { 65 in: `gopkg.in/yaml%2ev3.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`, 66 pkg: `gopkg.in/yaml%2ev3`, 67 sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]", 68 }, 69 } 70 71 for _, tc := range tests { 72 t.Run(tc.in, func(t *testing.T) { 73 pkg, sym := splitPkg(tc.in) 74 if pkg != tc.pkg { 75 t.Errorf("splitPkg(%q) got pkg %q want %q", tc.in, pkg, tc.pkg) 76 } 77 if sym != tc.sym { 78 t.Errorf("splitPkg(%q) got sym %q want %q", tc.in, sym, tc.sym) 79 } 80 }) 81 } 82 }