Commit 8d44052b authored by Rob Pike's avatar Rob Pike

iterator for vector

R=rsc
DELTA=35  (35 added, 0 deleted, 0 changed)
OCL=26662
CL=26662
parent 482cbb1f
......@@ -210,3 +210,19 @@ func (p *Vector) Swap(i, j int) {
a := p.a;
a[i], a[j] = a[j], a[i]
}
// Iterate over all elements; driver for range
func (p *Vector) iterate(c chan Element) {
for i := 0; i < len(p.a); i++ {
c <- p.a[i]
}
close(c);
}
// Channel iterator for range.
func (p *Vector) Iter() chan Element {
c := make(chan Element);
go p.iterate(c);
return c;
}
......@@ -139,6 +139,7 @@ func TestInsertVector(t *testing.T) {
verify_pattern(t, a, 8, 1000, 2);
}
func TestSorting(t *testing.T) {
const n = 100;
a := vector.NewIntVector(n);
......@@ -170,3 +171,21 @@ func TestDo(t *testing.T) {
t.Error("should visit", n, "values; did visit", count)
}
}
func TestIter(t *testing.T) {
const Len = 100;
x := vector.New(Len);
for i := 0; i < Len; i++ {
x.Set(i, i*i);
}
i := 0;
for v := range x.Iter() {
if v.(int) != i*i {
t.Error("Iter expected", i*i, "got", v.(int))
}
i++;
}
if i != Len {
t.Error("Iter stopped at", i, "not", Len)
}
}
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