cmd/cloner: add regression test for slice nil/empty semantics

We had a misstep with the semantics when applying an optimization that
showed up in the roll into corp. This test ensures that case and related
cases must be retained.

Updates #9410
Updates #9601
Signed-off-by: James Tucker <james@tailscale.com>
This commit is contained in:
James Tucker
2023-09-29 18:31:45 -07:00
committed by James Tucker
parent e03f0d5f5c
commit ab810f1f6d
5 changed files with 131 additions and 1 deletions
+60
View File
@@ -0,0 +1,60 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause
package main
import (
"reflect"
"testing"
"tailscale.com/cmd/cloner/clonerex"
)
func TestSliceContainer(t *testing.T) {
num := 5
examples := []struct {
name string
in *clonerex.SliceContianer
}{
{
name: "nil",
in: nil,
},
{
name: "zero",
in: &clonerex.SliceContianer{},
},
{
name: "empty",
in: &clonerex.SliceContianer{
Slice: []*int{},
},
},
{
name: "nils",
in: &clonerex.SliceContianer{
Slice: []*int{nil, nil, nil, nil, nil},
},
},
{
name: "one",
in: &clonerex.SliceContianer{
Slice: []*int{&num},
},
},
{
name: "several",
in: &clonerex.SliceContianer{
Slice: []*int{&num, &num, &num, &num, &num},
},
},
}
for _, ex := range examples {
t.Run(ex.name, func(t *testing.T) {
out := ex.in.Clone()
if !reflect.DeepEqual(ex.in, out) {
t.Errorf("Clone() = %v, want %v", out, ex.in)
}
})
}
}