diff options
Diffstat (limited to 'src/cmd/compile/internal/test/testdata/append_test.go')
| -rw-r--r-- | src/cmd/compile/internal/test/testdata/append_test.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/test/testdata/append_test.go b/src/cmd/compile/internal/test/testdata/append_test.go new file mode 100644 index 0000000000..6663ce75fa --- /dev/null +++ b/src/cmd/compile/internal/test/testdata/append_test.go @@ -0,0 +1,61 @@ +// Copyright 2015 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. + +// append_ssa.go tests append operations. +package main + +import "testing" + +//go:noinline +func appendOne_ssa(a []int, x int) []int { + return append(a, x) +} + +//go:noinline +func appendThree_ssa(a []int, x, y, z int) []int { + return append(a, x, y, z) +} + +func eqBytes(a, b []int) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +func expect(t *testing.T, got, want []int) { + if eqBytes(got, want) { + return + } + t.Errorf("expected %v, got %v\n", want, got) +} + +func testAppend(t *testing.T) { + var store [7]int + a := store[:0] + + a = appendOne_ssa(a, 1) + expect(t, a, []int{1}) + a = appendThree_ssa(a, 2, 3, 4) + expect(t, a, []int{1, 2, 3, 4}) + a = appendThree_ssa(a, 5, 6, 7) + expect(t, a, []int{1, 2, 3, 4, 5, 6, 7}) + if &a[0] != &store[0] { + t.Errorf("unnecessary grow") + } + a = appendOne_ssa(a, 8) + expect(t, a, []int{1, 2, 3, 4, 5, 6, 7, 8}) + if &a[0] == &store[0] { + t.Errorf("didn't grow") + } +} + +func TestAppend(t *testing.T) { + testAppend(t) +} |
