Commit ee9b5a15 authored by Rob Pike's avatar Rob Pike

powser cleanup.

- don't need *struct
- don't need item/rat both
- closures make the inner slaves easier
- delete some old BUG comments

powser2 is left mostly alone, for variety.

R=rsc
DELTA=134  (2 added, 20 deleted, 112 changed)
OCL=24579
CL=24581
parent 3e029875
This diff is collapsed.
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
// See Squinting at Power Series by Doug McIlroy, // See Squinting at Power Series by Doug McIlroy,
// http://www.cs.bell-labs.com/who/rsc/thread/squint.pdf // http://www.cs.bell-labs.com/who/rsc/thread/squint.pdf
// Like powser1.go but uses channels of interfaces. // Like powser1.go but uses channels of interfaces.
// Has not been cleaned up as much as powser1.go, to keep
// it distinct and therefore a different test.
package main package main
...@@ -129,8 +131,8 @@ func get(in *dch) *rat { ...@@ -129,8 +131,8 @@ func get(in *dch) *rat {
// Get one item from each of n demand channels // Get one item from each of n demand channels
func getn(in []*dch, n int) []item { func getn(in []*dch) []item {
// BUG n:=len(in); n:=len(in);
if n != 2 { panic("bad n in getn") }; if n != 2 { panic("bad n in getn") };
req := make([] chan int, 2); req := make([] chan int, 2);
dat := make([] chan item, 2); dat := make([] chan item, 2);
...@@ -165,7 +167,7 @@ func getn(in []*dch, n int) []item { ...@@ -165,7 +167,7 @@ func getn(in []*dch, n int) []item {
// Get one item from each of 2 demand channels // Get one item from each of 2 demand channels
func get2(in0 *dch, in1 *dch) []item { func get2(in0 *dch, in1 *dch) []item {
return getn([]*dch{in0, in1}, 2); return getn([]*dch{in0, in1});
} }
func copy(in *dch, out *dch){ func copy(in *dch, out *dch){
...@@ -420,7 +422,7 @@ func Shift(c *rat, U PS) PS{ ...@@ -420,7 +422,7 @@ func Shift(c *rat, U PS) PS{
// Convert array of coefficients, constant term first // Convert array of coefficients, constant term first
// to a (finite) power series // to a (finite) power series
/* BUG: NEED LEN OF ARRAY /*
func Poly(a [] *rat) PS{ func Poly(a [] *rat) PS{
Z:=mkPS(); Z:=mkPS();
begin func(a [] *rat, Z PS){ begin func(a [] *rat, Z PS){
...@@ -652,13 +654,11 @@ func main() { ...@@ -652,13 +654,11 @@ func main() {
check(Add(Ones, Twos), itor(3), 0, "Add Ones Twos"); // 3 3 3 3 3 check(Add(Ones, Twos), itor(3), 0, "Add Ones Twos"); // 3 3 3 3 3
a := make([]*rat, N); a := make([]*rat, N);
d := Diff(Ones); d := Diff(Ones);
// BUG: want array initializer
for i:=0; i < N; i++ { for i:=0; i < N; i++ {
a[i] = itor(int64(i+1)) a[i] = itor(int64(i+1))
} }
checka(d, a, "Diff"); // 1 2 3 4 5 checka(d, a, "Diff"); // 1 2 3 4 5
in := Integ(zero, Ones); in := Integ(zero, Ones);
// BUG: want array initializer
a[0] = zero; // integration constant a[0] = zero; // integration constant
for i:=1; i < N; i++ { for i:=1; i < N; i++ {
a[i] = i2tor(1, int64(i)) a[i] = i2tor(1, int64(i))
...@@ -667,13 +667,11 @@ func main() { ...@@ -667,13 +667,11 @@ func main() {
check(Cmul(neg(one), Twos), itor(-2), 10, "CMul"); // -1 -1 -1 -1 -1 check(Cmul(neg(one), Twos), itor(-2), 10, "CMul"); // -1 -1 -1 -1 -1
check(Sub(Ones, Twos), itor(-1), 0, "Sub Ones Twos"); // -1 -1 -1 -1 -1 check(Sub(Ones, Twos), itor(-1), 0, "Sub Ones Twos"); // -1 -1 -1 -1 -1
m := Mul(Ones, Ones); m := Mul(Ones, Ones);
// BUG: want array initializer
for i:=0; i < N; i++ { for i:=0; i < N; i++ {
a[i] = itor(int64(i+1)) a[i] = itor(int64(i+1))
} }
checka(m, a, "Mul"); // 1 2 3 4 5 checka(m, a, "Mul"); // 1 2 3 4 5
e := Exp(Ones); e := Exp(Ones);
// BUG: want array initializer
a[0] = itor(1); a[0] = itor(1);
a[1] = itor(1); a[1] = itor(1);
a[2] = i2tor(3,2); a[2] = i2tor(3,2);
...@@ -686,7 +684,6 @@ func main() { ...@@ -686,7 +684,6 @@ func main() {
a[9] = i2tor(4596553,362880); a[9] = i2tor(4596553,362880);
checka(e, a, "Exp"); // 1 1 3/2 13/6 73/24 checka(e, a, "Exp"); // 1 1 3/2 13/6 73/24
at := Integ(zero, MonSubst(Ones, neg(one), 2)); at := Integ(zero, MonSubst(Ones, neg(one), 2));
// BUG: want array initializer
for c, i := 1, 0; i < N; i++ { for c, i := 1, 0; i < N; i++ {
if i%2 == 0 { if i%2 == 0 {
a[i] = zero a[i] = zero
...@@ -698,7 +695,6 @@ func main() { ...@@ -698,7 +695,6 @@ func main() {
checka(at, a, "ATan"); // 0 -1 0 -1/3 0 -1/5 checka(at, a, "ATan"); // 0 -1 0 -1/3 0 -1/5
/* /*
t := Revert(Integ(zero, MonSubst(Ones, neg(one), 2))); t := Revert(Integ(zero, MonSubst(Ones, neg(one), 2)));
// BUG: want array initializer
a[0] = zero; a[0] = zero;
a[1] = itor(1); a[1] = itor(1);
a[2] = zero; a[2] = zero;
...@@ -712,5 +708,4 @@ func main() { ...@@ -712,5 +708,4 @@ func main() {
checka(t, a, "Tan"); // 0 1 0 1/3 0 2/15 checka(t, a, "Tan"); // 0 1 0 1/3 0 2/15
*/ */
} }
sys.Exit(0); // BUG: force waiting goroutines to exit
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment