// Copyright 2016-2020, Pulumi Corporation. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package deepcopy import ( "fmt" "testing" "github.com/stretchr/testify/assert" ) func TestDeepCopy(t *testing.T) { t.Parallel() cases := []interface{}{ bool(false), bool(true), int(-42), int8(-42), int16(-42), int32(-42), int64(-42), uint(42), uint8(42), uint16(42), uint32(42), uint64(42), float32(3.14159), float64(3.14159), complex64(complex(3.14159, -42)), complex(3.14159, -42), "foo", [2]byte{42, 24}, []byte{0, 1, 2, 3}, []string{"foo", "bar"}, map[string]int{ "a": 42, "b": 24, }, struct { Foo int Bar map[int]int }{ Foo: 42, Bar: map[int]int{ 19: 77, }, }, []map[string]string{ { "foo": "bar", "baz": "qux", }, { "alpha": "beta", }, }, map[string]interface{}{ "foo": map[string]interface{}{ "bar": "baz", }, "bar": []int{42}, }, } //nolint:paralleltest // false positive because range var isn't used directly in t.Run(name) arg for i, c := range cases { i, c := i, c t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) { t.Parallel() assert.EqualValues(t, c, Copy(c)) }) } }