mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 08:40:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			156 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $D/$F.go && $L $F.$A && ./$A.out
 | |
| 
 | |
| // 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.
 | |
| 
 | |
| package	main
 | |
| 
 | |
| func
 | |
| setpd(a []int)
 | |
| {
 | |
| //	print("setpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
 | |
| 	for i:=0; i<len(a); i++ {
 | |
| 		a[i] = i;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func
 | |
| sumpd(a []int) int
 | |
| {
 | |
| //	print("sumpd a=", a, " len=", len(a), " cap=", cap(a), "\n");
 | |
| 	t := 0;
 | |
| 	for i:=0; i<len(a); i++ {
 | |
| 		t += a[i];
 | |
| 	}
 | |
| //	print("sumpd t=", t, "\n");
 | |
| 	return t;
 | |
| }
 | |
| 
 | |
| func
 | |
| setpf(a *[20]int)
 | |
| {
 | |
| //	print("setpf a=", a, " len=", len(a), " cap=", cap(a), "\n");
 | |
| 	for i:=0; i<len(a); i++ {
 | |
| 		a[i] = i;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func
 | |
| sumpf(a *[20]int) int
 | |
| {
 | |
| //	print("sumpf a=", a, " len=", len(a), " cap=", cap(a), "\n");
 | |
| 	t := 0;
 | |
| 	for i:=0; i<len(a); i++ {
 | |
| 		t += a[i];
 | |
| 	}
 | |
| //	print("sumpf t=", t, "\n");
 | |
| 	return t;
 | |
| }
 | |
| 
 | |
| func
 | |
| res(t int, lb, hb int)
 | |
| {
 | |
| 	sb := (hb-lb)*(hb+lb-1)/2;
 | |
| 	if t != sb {
 | |
| 		print(	"lb=", lb,
 | |
| 			"; hb=", hb,
 | |
| 			"; t=", t,
 | |
| 			"; sb=", sb,
 | |
| 			"\n");
 | |
| 		panic("res")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // call ptr dynamic with ptr dynamic
 | |
| func
 | |
| testpdpd()
 | |
| {
 | |
| 	a := make([]int, 10, 100);
 | |
| 	if len(a) != 10 && cap(a) != 100 {
 | |
| 		panic("len and cap from new: ", len(a), " ", cap(a), "\n");
 | |
| 	}
 | |
| 
 | |
| 	a = a[0:100];
 | |
| 	setpd(a);
 | |
| 
 | |
| 	a = a[0:10];
 | |
| 	res(sumpd(a), 0, 10);
 | |
| 
 | |
| 	a = a[5:25];
 | |
| 	res(sumpd(a), 5, 25);
 | |
| }
 | |
| 
 | |
| // call ptr fixed with ptr fixed
 | |
| func
 | |
| testpfpf()
 | |
| {
 | |
| 	var a [20]int;
 | |
| 
 | |
| 	setpf(&a);
 | |
| 	res(sumpf(&a), 0, 20);
 | |
| }
 | |
| 
 | |
| // call ptr dynamic with ptr fixed from new
 | |
| func
 | |
| testpdpf1()
 | |
| {
 | |
| 	a := new([40]int);
 | |
| 	setpd(*a);
 | |
| 	res(sumpd(*a), 0, 40);
 | |
| 
 | |
| 	b := (*a)[5:30];
 | |
| 	res(sumpd(b), 5, 30);
 | |
| }
 | |
| 
 | |
| // call ptr dynamic with ptr fixed from var
 | |
| func
 | |
| testpdpf2()
 | |
| {
 | |
| 	var a [80]int;
 | |
| 
 | |
| 	setpd(a);
 | |
| 	res(sumpd(a), 0, 80);
 | |
| }
 | |
| 
 | |
| // generate bounds error with ptr dynamic
 | |
| func
 | |
| testpdfault()
 | |
| {
 | |
| 	a := make([]int, 100);
 | |
| 
 | |
| 	print("good\n");
 | |
| 	for i:=0; i<100; i++ {
 | |
| 		a[i] = 0;
 | |
| 	}
 | |
| 	print("should fault\n");
 | |
| 	a[100] = 0;
 | |
| 	print("bad\n");
 | |
| }
 | |
| 
 | |
| // generate bounds error with ptr fixed
 | |
| func
 | |
| testfdfault()
 | |
| {
 | |
| 	var a [80]int;
 | |
| 
 | |
| 	print("good\n");
 | |
| 	for i:=0; i<80; i++ {
 | |
| 		a[i] = 0;
 | |
| 	}
 | |
| 	print("should fault\n");
 | |
| 	x := 80;
 | |
| 	a[x] = 0;
 | |
| 	print("bad\n");
 | |
| }
 | |
| 
 | |
| func
 | |
| main()
 | |
| {
 | |
| 	testpdpd();
 | |
| 	testpfpf();
 | |
| 	testpdpf1();
 | |
| 	testpdpf2();
 | |
| //	print("testpdfault\n");	testpdfault();
 | |
| //	print("testfdfault\n");	testfdfault();
 | |
| }
 | 
