]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/types2: add sizeof test
authorRobert Griesemer <gri@golang.org>
Thu, 15 Apr 2021 19:18:08 +0000 (12:18 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 15 Apr 2021 19:41:39 +0000 (19:41 +0000)
Change-Id: I75d3c8546b7ad51d8c7369e7289036b697d6b913
Reviewed-on: https://go-review.googlesource.com/c/go/+/310530
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
src/cmd/compile/internal/types2/sizeof_test.go [new file with mode: 0644]

diff --git a/src/cmd/compile/internal/types2/sizeof_test.go b/src/cmd/compile/internal/types2/sizeof_test.go
new file mode 100644 (file)
index 0000000..236feb0
--- /dev/null
@@ -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)
+               }
+       }
+}