github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/ssa/interp/testdata/zeros.go (about) 1 // Copyright 2022 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 // Test interpretation on zero values with type params. 6 package zeros 7 8 func assert(cond bool, msg string) { 9 if !cond { 10 panic(msg) 11 } 12 } 13 14 func tp0[T int | string | float64]() T { return T(0) } 15 16 func tpFalse[T ~bool]() T { return T(false) } 17 18 func tpEmptyString[T string | []byte]() T { return T("") } 19 20 func tpNil[T *int | []byte]() T { return T(nil) } 21 22 func main() { 23 // zero values 24 var zi int 25 var zf float64 26 var zs string 27 28 assert(zi == int(0), "zero value of int is int(0)") 29 assert(zf == float64(0), "zero value of float64 is float64(0)") 30 assert(zs != string(0), "zero value of string is not string(0)") 31 32 assert(zi == tp0[int](), "zero value of int is int(0)") 33 assert(zf == tp0[float64](), "zero value of float64 is float64(0)") 34 assert(zs != tp0[string](), "zero value of string is not string(0)") 35 36 assert(zf == -0.0, "constant -0.0 is converted to 0.0") 37 38 assert(!tpFalse[bool](), "zero value of bool is false") 39 40 assert(tpEmptyString[string]() == zs, `zero value of string is string("")`) 41 assert(len(tpEmptyString[[]byte]()) == 0, `[]byte("") is empty`) 42 43 assert(tpNil[*int]() == nil, "nil is nil") 44 assert(tpNil[[]byte]() == nil, "nil is nil") 45 }