diff options
Diffstat (limited to 'test/ken')
-rw-r--r-- | test/ken/array.go | 163 | ||||
-rw-r--r-- | test/ken/chan.go | 342 | ||||
-rw-r--r-- | test/ken/string.go | 102 |
3 files changed, 301 insertions, 306 deletions
diff --git a/test/ken/array.go b/test/ken/array.go index 9600e8a1a..7785cdf8f 100644 --- a/test/ken/array.go +++ b/test/ken/array.go @@ -4,141 +4,130 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package main +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 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]; +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; + // 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 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]; +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; + // print("sumpf t=", t, "\n"); + return t } -func -res(t int, lb, hb int) { - sb := (hb-lb)*(hb+lb-1)/2; +func res(t int, lb, hb int) { + sb := (hb - lb) * (hb + lb - 1) / 2 if t != sb { - print( "lb=", lb, + print("lb=", lb, "; hb=", hb, "; t=", t, "; sb=", sb, - "\n"); + "\n") panic("res") } } // call ptr dynamic with ptr dynamic -func -testpdpd() { - a := make([]int, 10, 100); +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"); + print("len and cap from new: ", len(a), " ", cap(a), "\n") + panic("fail") } - a = a[0:100]; - setpd(a); + a = a[0:100] + setpd(a) - a = a[0:10]; - res(sumpd(a), 0, 10); + a = a[0:10] + res(sumpd(a), 0, 10) - a = a[5:25]; - res(sumpd(a), 5, 25); + a = a[5:25] + res(sumpd(a), 5, 25) } // call ptr fixed with ptr fixed -func -testpfpf() { - var a [20]int; +func testpfpf() { + var a [20]int - setpf(&a); - res(sumpf(&a), 0, 20); + 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); +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; +func testpdpf2() { + var a [80]int - setpd(&a); - res(sumpd(&a), 0, 80); + setpd(&a) + res(sumpd(&a), 0, 80) } // generate bounds error with ptr dynamic -func -testpdfault() { - a := make([]int, 100); +func testpdfault() { + a := make([]int, 100) - print("good\n"); - for i:=0; i<100; i++ { - a[i] = 0; + print("good\n") + for i := 0; i < 100; i++ { + a[i] = 0 } - print("should fault\n"); - a[100] = 0; - print("bad\n"); + print("should fault\n") + a[100] = 0 + print("bad\n") } // generate bounds error with ptr fixed -func -testfdfault() { - var a [80]int; +func testfdfault() { + var a [80]int - print("good\n"); - for i:=0; i<80; i++ { - a[i] = 0; + print("good\n") + for i := 0; i < 80; i++ { + a[i] = 0 } - print("should fault\n"); - x := 80; - a[x] = 0; - print("bad\n"); + 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(); +func main() { + testpdpd() + testpfpf() + testpdpf1() + testpdpf2() + // print("testpdfault\n"); testpdfault(); + // print("testfdfault\n"); testfdfault(); } diff --git a/test/ken/chan.go b/test/ken/chan.go index 7504b4968..ef75b044d 100644 --- a/test/ken/chan.go +++ b/test/ken/chan.go @@ -10,36 +10,33 @@ import "os" import "runtime" import "sync" -var randx int; +var randx int -func -nrand(n int) int { - randx += 10007; +func nrand(n int) int { + randx += 10007 if randx >= 1000000 { - randx -= 1000000; + randx -= 1000000 } - return randx%n; + return randx % n } -type Chan struct { - sc,rc chan int; // send and recv chan - sv,rv int; // send and recv seq +type Chan struct { + sc, rc chan int // send and recv chan + sv, rv int // send and recv seq } -var -( - nproc int; - nprocLock sync.Mutex; - cval int; - end int = 10000; - totr,tots int; - totLock sync.Mutex; - nc *Chan; +var ( + nproc int + nprocLock sync.Mutex + cval int + end int = 10000 + totr, tots int + totLock sync.Mutex + nc *Chan ) -func -init() { - nc = new(Chan); +func init() { + nc = new(Chan) } func changeNproc(adjust int) int { @@ -50,280 +47,283 @@ func changeNproc(adjust int) int { return ret } -func -mkchan(c,n int) []*Chan { - ca := make([]*Chan, n); - for i:=0; i<n; i++ { - cval = cval+100; - ch := new(Chan); - ch.sc = make(chan int, c); - ch.rc = ch.sc; - ch.sv = cval; - ch.rv = cval; - ca[i] = ch; +func mkchan(c, n int) []*Chan { + ca := make([]*Chan, n) + for i := 0; i < n; i++ { + cval = cval + 100 + ch := new(Chan) + ch.sc = make(chan int, c) + ch.rc = ch.sc + ch.sv = cval + ch.rv = cval + ca[i] = ch } - return ca; + return ca } -func -expect(v, v0 int) (newv int) { +func expect(v, v0 int) (newv int) { if v == v0 { if v%100 == 75 { - return end; + return end } - return v+1; + return v + 1 } - panic("got ", v, " expected ", v0+1, "\n"); + print("got ", v, " expected ", v0+1, "\n") + panic("fail") } func (c *Chan) send() bool { -// print("send ", c.sv, "\n"); - totLock.Lock(); - tots++; - totLock.Unlock(); - c.sv = expect(c.sv, c.sv); + // print("send ", c.sv, "\n"); + totLock.Lock() + tots++ + totLock.Unlock() + c.sv = expect(c.sv, c.sv) if c.sv == end { - c.sc = nil; - return true; + c.sc = nil + return true } - return false; + return false } -func -send(c *Chan) { +func send(c *Chan) { for { - for r:=nrand(10); r>=0; r-- { - runtime.Gosched(); + for r := nrand(10); r >= 0; r-- { + runtime.Gosched() } - c.sc <- c.sv; + c.sc <- c.sv if c.send() { - break; + break } } changeNproc(-1) } func (c *Chan) recv(v int) bool { -// print("recv ", v, "\n"); - totLock.Lock(); - totr++; - totLock.Unlock(); - c.rv = expect(c.rv, v); + // print("recv ", v, "\n"); + totLock.Lock() + totr++ + totLock.Unlock() + c.rv = expect(c.rv, v) if c.rv == end { - c.rc = nil; - return true; + c.rc = nil + return true } - return false; + return false } -func -recv(c *Chan) { - var v int; +func recv(c *Chan) { + var v int for { - for r:=nrand(10); r>=0; r-- { - runtime.Gosched(); + for r := nrand(10); r >= 0; r-- { + runtime.Gosched() } - v = <-c.rc; + v = <-c.rc if c.recv(v) { - break; + break } } - changeNproc(-1); + changeNproc(-1) } -func -sel(r0,r1,r2,r3, s0,s1,s2,s3 *Chan) { - var v int; +func sel(r0, r1, r2, r3, s0, s1, s2, s3 *Chan) { + var v int - a := 0; // local chans running + a := 0 // local chans running - if r0.rc != nil { a++ } - if r1.rc != nil { a++ } - if r2.rc != nil { a++ } - if r3.rc != nil { a++ } - if s0.sc != nil { a++ } - if s1.sc != nil { a++ } - if s2.sc != nil { a++ } - if s3.sc != nil { a++ } + if r0.rc != nil { + a++ + } + if r1.rc != nil { + a++ + } + if r2.rc != nil { + a++ + } + if r3.rc != nil { + a++ + } + if s0.sc != nil { + a++ + } + if s1.sc != nil { + a++ + } + if s2.sc != nil { + a++ + } + if s3.sc != nil { + a++ + } for { - for r:=nrand(5); r>=0; r-- { - runtime.Gosched(); + for r := nrand(5); r >= 0; r-- { + runtime.Gosched() } select { case v = <-r0.rc: if r0.recv(v) { - a--; + a-- } case v = <-r1.rc: if r1.recv(v) { - a--; + a-- } case v = <-r2.rc: if r2.recv(v) { - a--; + a-- } case v = <-r3.rc: if r3.recv(v) { - a--; + a-- } case s0.sc <- s0.sv: if s0.send() { - a--; + a-- } case s1.sc <- s1.sv: if s1.send() { - a--; + a-- } case s2.sc <- s2.sv: if s2.send() { - a--; + a-- } case s3.sc <- s3.sv: if s3.send() { - a--; + a-- } } if a == 0 { - break; + break } } - changeNproc(-1); + changeNproc(-1) } // direct send to direct recv -func -test1(c *Chan) { +func test1(c *Chan) { changeNproc(2) - go send(c); - go recv(c); + go send(c) + go recv(c) } // direct send to select recv -func -test2(c int) { - ca := mkchan(c,4); +func test2(c int) { + ca := mkchan(c, 4) changeNproc(4) - go send(ca[0]); - go send(ca[1]); - go send(ca[2]); - go send(ca[3]); + go send(ca[0]) + go send(ca[1]) + go send(ca[2]) + go send(ca[3]) changeNproc(1) - go sel(ca[0],ca[1],ca[2],ca[3], nc,nc,nc,nc); + go sel(ca[0], ca[1], ca[2], ca[3], nc, nc, nc, nc) } // select send to direct recv -func -test3(c int) { - ca := mkchan(c,4); +func test3(c int) { + ca := mkchan(c, 4) changeNproc(4) - go recv(ca[0]); - go recv(ca[1]); - go recv(ca[2]); - go recv(ca[3]); + go recv(ca[0]) + go recv(ca[1]) + go recv(ca[2]) + go recv(ca[3]) changeNproc(1) - go sel(nc,nc,nc,nc, ca[0],ca[1],ca[2],ca[3]); + go sel(nc, nc, nc, nc, ca[0], ca[1], ca[2], ca[3]) } // select send to select recv -func -test4(c int) { - ca := mkchan(c,4); +func test4(c int) { + ca := mkchan(c, 4) changeNproc(2) - go sel(nc,nc,nc,nc, ca[0],ca[1],ca[2],ca[3]); - go sel(ca[0],ca[1],ca[2],ca[3], nc,nc,nc,nc); + go sel(nc, nc, nc, nc, ca[0], ca[1], ca[2], ca[3]) + go sel(ca[0], ca[1], ca[2], ca[3], nc, nc, nc, nc) } -func -test5(c int) { - ca := mkchan(c,8); +func test5(c int) { + ca := mkchan(c, 8) changeNproc(2) - go sel(ca[4],ca[5],ca[6],ca[7], ca[0],ca[1],ca[2],ca[3]); - go sel(ca[0],ca[1],ca[2],ca[3], ca[4],ca[5],ca[6],ca[7]); + go sel(ca[4], ca[5], ca[6], ca[7], ca[0], ca[1], ca[2], ca[3]) + go sel(ca[0], ca[1], ca[2], ca[3], ca[4], ca[5], ca[6], ca[7]) } -func -test6(c int) { - ca := mkchan(c,12); +func test6(c int) { + ca := mkchan(c, 12) changeNproc(4) - go send(ca[4]); - go send(ca[5]); - go send(ca[6]); - go send(ca[7]); + go send(ca[4]) + go send(ca[5]) + go send(ca[6]) + go send(ca[7]) changeNproc(4) - go recv(ca[8]); - go recv(ca[9]); - go recv(ca[10]); - go recv(ca[11]); + go recv(ca[8]) + go recv(ca[9]) + go recv(ca[10]) + go recv(ca[11]) changeNproc(2) - go sel(ca[4],ca[5],ca[6],ca[7], ca[0],ca[1],ca[2],ca[3]); - go sel(ca[0],ca[1],ca[2],ca[3], ca[8],ca[9],ca[10],ca[11]); + go sel(ca[4], ca[5], ca[6], ca[7], ca[0], ca[1], ca[2], ca[3]) + go sel(ca[0], ca[1], ca[2], ca[3], ca[8], ca[9], ca[10], ca[11]) } // wait for outstanding tests to finish -func -wait() { - runtime.Gosched(); +func wait() { + runtime.Gosched() for changeNproc(0) != 0 { - runtime.Gosched(); + runtime.Gosched() } } // run all tests with specified buffer size -func -tests(c int) { - ca := mkchan(c,4); - test1(ca[0]); - test1(ca[1]); - test1(ca[2]); - test1(ca[3]); - wait(); +func tests(c int) { + ca := mkchan(c, 4) + test1(ca[0]) + test1(ca[1]) + test1(ca[2]) + test1(ca[3]) + wait() - test2(c); - wait(); + test2(c) + wait() - test3(c); - wait(); + test3(c) + wait() - test4(c); - wait(); + test4(c) + wait() - test5(c); - wait(); + test5(c) + wait() - test6(c); - wait(); + test6(c) + wait() } // run all test with 4 buffser sizes -func -main() { +func main() { - tests(0); - tests(1); - tests(10); - tests(100); + tests(0) + tests(1) + tests(10) + tests(100) - t := 4 * // buffer sizes - ( 4*4 + // tests 1,2,3,4 channels - 8 + // test 5 channels - 12 ) * // test 6 channels - 76; // sends/recvs on a channel + t := 4 * // buffer sizes + (4*4 + // tests 1,2,3,4 channels + 8 + // test 5 channels + 12) * // test 6 channels + 76 // sends/recvs on a channel if tots != t || totr != t { - print("tots=", tots, " totr=", totr, " sb=", t, "\n"); - os.Exit(1); + print("tots=", tots, " totr=", totr, " sb=", t, "\n") + os.Exit(1) } - os.Exit(0); + os.Exit(0) } diff --git a/test/ken/string.go b/test/ken/string.go index 14617de9c..6c15b1616 100644 --- a/test/ken/string.go +++ b/test/ken/string.go @@ -7,106 +7,112 @@ package main -func -main() { - var c string; +func main() { + var c string - a := `abc`; - b := `xyz`; + a := `abc` + b := `xyz` /* print a literal */ - print(`abc`); + print(`abc`) /* print a variable */ - print(b, "-"); + print(b, "-") /* catenate literals */ - print(`abc` + `xyz`, "-"); + print(`abc`+`xyz`, "-") /* catenate variables */ - print(a+b, "-"); + print(a+b, "-") /* compare literals */ if `abc` == `xyz` || `abc` != "abc" || `abc` > `xyz` { - panic("compare literals"); + panic("compare literals") } /* compare variables */ if a == b || a != a || a > b { - panic("compare variables"); + panic("compare variables") } /* cat */ - c = a+b; - print(c, "-"); + c = a + b + print(c, "-") /* catequal */ - c = a; - c += b; - print(c, "-"); + c = a + c += b + print(c, "-") /* clumsy evaluation */ - c = b; - c = a + c; - print(c, "-"); + c = b + c = a + c + print(c, "-") /* len */ if len(c) != 6 { - panic("len ", len(c)); + print("len ", len(c)) + panic("fail") } /* index strings */ - for i:=0; i<len(c); i=i+1 { - if c[i] != (a+b)[i] { - panic("index ", i, " ", c[i], " ", (a+b)[i]); + for i := 0; i < len(c); i = i + 1 { + if c[i] != (a + b)[i] { + print("index ", i, " ", c[i], " ", (a + b)[i]) + panic("fail") } } /* slice strings */ - print(c[0:3], c[3:]); + print(c[0:3], c[3:]) - print("\n"); + print("\n") /* create string with integer constant */ - c = string('x'); + c = string('x') if c != "x" { - panic("create int ", c); + print("create int ", c) + panic("fail") } /* create string with integer variable */ - v := 'x'; - c = string(v); + v := 'x' + c = string(v) if c != "x" { - panic("create int ", c); + print("create int ", c) + panic("fail") } /* create string with byte array */ - var z1 [3]byte; - z1[0] = 'a'; - z1[1] = 'b'; - z1[2] = 'c'; - c = string(&z1); + var z1 [3]byte + z1[0] = 'a' + z1[1] = 'b' + z1[2] = 'c' + c = string(&z1) if c != "abc" { - panic("create byte array ", c); + print("create byte array ", c) + panic("fail") } /* create string with int array */ - var z2 [3]int; - z2[0] = 'a'; - z2[1] = '\u1234'; - z2[2] = 'c'; - c = string(&z2); + var z2 [3]int + z2[0] = 'a' + z2[1] = '\u1234' + z2[2] = 'c' + c = string(&z2) if c != "a\u1234c" { - panic("create int array ", c); + print("create int array ", c) + panic("fail") } /* create string with byte array pointer */ - z3 := new([3]byte); - z3[0] = 'a'; - z3[1] = 'b'; - z3[2] = 'c'; - c = string(z3); + z3 := new([3]byte) + z3[0] = 'a' + z3[1] = 'b' + z3[2] = 'c' + c = string(z3) if c != "abc" { - panic("create array pointer ", c); + print("create array pointer ", c) + panic("fail") } } |