| // $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 | |
| export 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; | |
| } | |
| } | |
| export 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; | |
| } | |
| export 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; | |
| } | |
| } | |
| export 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 := new([]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 := new([]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"); | |
| a[80] = 0; | |
| print("bad\n"); | |
| } | |
| func | |
| main() | |
| { | |
| testpdpd(); | |
| testpfpf(); | |
| testpdpf1(); | |
| testpdpf2(); | |
| // print("testpdfault\n"); testpdfault(); | |
| // print("testfdfault\n"); testfdfault(); | |
| } |