| // Copyright 2018 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. |
| |
| // +build !nacl |
| |
| package runtime_test |
| |
| import ( |
| "reflect" |
| "runtime" |
| "testing" |
| "unsafe" |
| ) |
| |
| // Assert that the size of important structures do not change unexpectedly. |
| |
| func TestSizeof(t *testing.T) { |
| if runtime.Compiler != "gc" { |
| t.Skip("skipping size test; specific to gc compiler") |
| } |
| |
| const _64bit = unsafe.Sizeof(uintptr(0)) == 8 |
| |
| var tests = []struct { |
| val interface{} // type as a value |
| _32bit uintptr // size on 32bit platforms |
| _64bit uintptr // size on 64bit platforms |
| }{ |
| {runtime.G{}, 216, 376}, // g, but exported for testing |
| } |
| |
| for _, tt := range tests { |
| want := tt._32bit |
| if _64bit { |
| want = tt._64bit |
| } |
| got := reflect.TypeOf(tt.val).Size() |
| if want != got { |
| t.Errorf("unsafe.Sizeof(%T) = %d, want %d", tt.val, got, want) |
| } |
| } |
| } |