| // Copyright 2026 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package specgen |
| |
| import ( |
| "simd/archsimd/_gen/specgen/specexpr" |
| "testing" |
| ) |
| |
| func TestFuncSignature(t *testing.T) { |
| int32x4 := specexpr.Vector{Elem: specexpr.Basic{Base: "int", Bits: 32}, Width: specexpr.Int(128)} |
| intType := specexpr.Basic{Base: "int", Bits: 0} |
| |
| tests := []struct { |
| name string |
| fn Func |
| want string |
| }{ |
| { |
| name: "method with named receiver, in, and out", |
| fn: Func{ |
| Name: "Add", |
| Recv: Arg{Name: "x", Type: int32x4}, |
| In: []Arg{{Name: "y", Type: int32x4}}, |
| Out: []Arg{{Name: "z", Type: int32x4}}, |
| }, |
| want: "func (x Int32x4) Add(y Int32x4) (z Int32x4)", |
| }, |
| { |
| name: "method with omitted names", |
| fn: Func{ |
| Name: "Add", |
| Recv: Arg{Name: "", Type: int32x4}, |
| In: []Arg{{Name: "", Type: int32x4}}, |
| Out: []Arg{{Name: "", Type: int32x4}}, |
| }, |
| want: "func (Int32x4) Add(Int32x4) Int32x4", |
| }, |
| { |
| name: "method with multiple unnamed results", |
| fn: Func{ |
| Name: "DivMod", |
| Recv: Arg{Name: "x", Type: int32x4}, |
| In: []Arg{{Name: "", Type: int32x4}}, |
| Out: []Arg{{Name: "", Type: int32x4}, {Name: "", Type: intType}}, |
| }, |
| want: "func (x Int32x4) DivMod(Int32x4) (Int32x4, int)", |
| }, |
| { |
| name: "method with mixed named and unnamed", |
| fn: Func{ |
| Name: "DivMod", |
| Recv: Arg{Name: "x", Type: int32x4}, |
| In: []Arg{{Name: "", Type: int32x4}}, |
| Out: []Arg{{Name: "", Type: int32x4}, {Name: "err", Type: intType}}, |
| }, |
| want: "func (x Int32x4) DivMod(Int32x4) (_ Int32x4, err int)", |
| }, |
| { |
| name: "package function with no receiver and no results", |
| fn: Func{ |
| Name: "Reset", |
| }, |
| want: "func Reset()", |
| }, |
| } |
| |
| for _, tc := range tests { |
| t.Run(tc.name, func(t *testing.T) { |
| got := tc.fn.Signature() |
| if got != tc.want { |
| t.Errorf("Signature() = %q, want %q", got, tc.want) |
| } |
| }) |
| } |
| } |