From 7ed6d1f2fb2e092f59ec56e0d16b1f9da33992a4 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 15 Apr 2021 12:18:08 -0700 Subject: [PATCH] cmd/compile/internal/types2: add sizeof test Change-Id: I75d3c8546b7ad51d8c7369e7289036b697d6b913 Reviewed-on: https://go-review.googlesource.com/c/go/+/310530 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley --- .../compile/internal/types2/sizeof_test.go | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/cmd/compile/internal/types2/sizeof_test.go diff --git a/src/cmd/compile/internal/types2/sizeof_test.go b/src/cmd/compile/internal/types2/sizeof_test.go new file mode 100644 index 0000000000..236feb0404 --- /dev/null +++ b/src/cmd/compile/internal/types2/sizeof_test.go @@ -0,0 +1,65 @@ +// 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 types2 + +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{}, 68, 136}, + {TypeParam{}, 28, 48}, + {instance{}, 52, 96}, + {bottom{}, 0, 0}, + {top{}, 0, 0}, + + // Objects + {PkgName{}, 64, 104}, + {Const{}, 64, 104}, + {TypeName{}, 56, 88}, + {Var{}, 60, 96}, + {Func{}, 60, 96}, + {Label{}, 60, 96}, + {Builtin{}, 60, 96}, + {Nil{}, 56, 88}, + + // Misc + {Scope{}, 56, 96}, + {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) + } + } +}