// Copyright 2021 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 types import ( "reflect" "testing" ) // Signal size changes of important structures. func TestSizeof(t *testing.T) { const _64bit = ^uint(0)>>32 != 0 var tests = []struct { val interface{} // type as a value _32bit uintptr // size on 32bit platforms _64bit uintptr // size on 64bit platforms }{ // Types {Basic{}, 16, 32}, {Array{}, 16, 24}, {Slice{}, 8, 16}, {Struct{}, 24, 48}, {Pointer{}, 8, 16}, {Tuple{}, 12, 24}, {Signature{}, 44, 88}, {_Sum{}, 12, 24}, {Interface{}, 60, 120}, {Map{}, 16, 32}, {Chan{}, 12, 24}, {Named{}, 64, 128}, {_TypeParam{}, 28, 48}, {instance{}, 44, 88}, {bottom{}, 0, 0}, {top{}, 0, 0}, // Objects {PkgName{}, 48, 88}, {Const{}, 48, 88}, {TypeName{}, 40, 72}, {Var{}, 44, 80}, {Func{}, 44, 80}, {Label{}, 44, 80}, {Builtin{}, 44, 80}, {Nil{}, 40, 72}, // Misc {Scope{}, 40, 80}, {Package{}, 40, 80}, } for _, test := range tests { got := reflect.TypeOf(test.val).Size() want := test._32bit if _64bit { want = test._64bit } if got != want { t.Errorf("unsafe.Sizeof(%T) = %d, want %d", test.val, got, want) } } }