1
0
mirror of https://github.com/golang/go synced 2024-11-12 10:30:23 -07:00
go/test/ken/array.go
Russ Cox 60ce95d7a1 code changes for array conversion.
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
2009-04-15 20:27:45 -07:00

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();
}