From f6ad4dcef54c5ce997a4bad5a6d86de229015700 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 16 Apr 2024 21:25:22 +0200 Subject: Adding upstream version 1.22.1. Signed-off-by: Daniel Baumann --- test/chancap.go | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 test/chancap.go (limited to 'test/chancap.go') diff --git a/test/chancap.go b/test/chancap.go new file mode 100644 index 0000000..8dce924 --- /dev/null +++ b/test/chancap.go @@ -0,0 +1,71 @@ +// run + +// Copyright 2009 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. + +// Test the cap predeclared function applied to channels. + +package main + +import ( + "strings" + "unsafe" +) + +type T chan int + +const ptrSize = unsafe.Sizeof((*byte)(nil)) + +func main() { + c := make(T, 10) + if len(c) != 0 || cap(c) != 10 { + println("chan len/cap ", len(c), cap(c), " want 0 10") + panic("fail") + } + + for i := 0; i < 3; i++ { + c <- i + } + if len(c) != 3 || cap(c) != 10 { + println("chan len/cap ", len(c), cap(c), " want 3 10") + panic("fail") + } + + c = make(T) + if len(c) != 0 || cap(c) != 0 { + println("chan len/cap ", len(c), cap(c), " want 0 0") + panic("fail") + } + + n := -1 + shouldPanic("makechan: size out of range", func() { _ = make(T, n) }) + shouldPanic("makechan: size out of range", func() { _ = make(T, int64(n)) }) + if ptrSize == 8 { + // Test mem > maxAlloc + var n2 int64 = 1 << 59 + shouldPanic("makechan: size out of range", func() { _ = make(T, int(n2)) }) + // Test elem.size*cap overflow + n2 = 1<<63 - 1 + shouldPanic("makechan: size out of range", func() { _ = make(T, int(n2)) }) + } else { + n = 1<<31 - 1 + shouldPanic("makechan: size out of range", func() { _ = make(T, n) }) + shouldPanic("makechan: size out of range", func() { _ = make(T, int64(n)) }) + } +} + +func shouldPanic(str string, f func()) { + defer func() { + err := recover() + if err == nil { + panic("did not panic") + } + s := err.(error).Error() + if !strings.Contains(s, str) { + panic("got panic " + s + ", want " + str) + } + }() + + f() +} -- cgit v1.2.3