mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
![Russ Cox](/assets/img/avatar_default.png)
as a reminder, the old conversion was that you could write var arr [10]byte; var slice []byte; slice = arr; but now you have to write slice = &arr; the change eliminates an implicit &, so that the only implicit &s left are in the . operator and in string(arr). also, removed utf8.EncodeRuneToString in favor of string(rune). R=r DELTA=83 (1 added, 23 deleted, 59 changed) OCL=27531 CL=27534
157 lines
2.2 KiB
Go
157 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();
|
|
}
|