| // 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) |
| } |
| } |
| } |