]> Cypherpunks repositories - gostls13.git/commitdiff
Add some primitive type aliases to exp/iterable and define Iter on them.
authorDavid Symonds <dsymonds@golang.org>
Mon, 16 Nov 2009 21:39:59 +0000 (13:39 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 16 Nov 2009 21:39:59 +0000 (13:39 -0800)
R=rsc
https://golang.org/cl/155065

src/pkg/exp/iterable/Makefile
src/pkg/exp/iterable/array.go [new file with mode: 0644]
src/pkg/exp/iterable/iterable_test.go

index 18e9e8170712c1dadbf9f5f3e4de04a97c633bb1..f448089ce64935910381b004fd3097300f54406a 100644 (file)
@@ -6,6 +6,7 @@ include $(GOROOT)/src/Make.$(GOARCH)
 
 TARG=exp/iterable
 GOFILES=\
+       array.go\
        iterable.go\
 
 include $(GOROOT)/src/Make.pkg
diff --git a/src/pkg/exp/iterable/array.go b/src/pkg/exp/iterable/array.go
new file mode 100644 (file)
index 0000000..371508e
--- /dev/null
@@ -0,0 +1,59 @@
+// 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 iterable
+
+// This file implements the Iterable interface on some primitive types.
+
+type ByteArray []byte
+
+func (a ByteArray) Iter() <-chan interface{} {
+       ch := make(chan interface{});
+       go func() {
+               for _, e := range a {
+                       ch <- e
+               }
+               close(ch);
+       }();
+       return ch;
+}
+
+type IntArray []int
+
+func (a IntArray) Iter() <-chan interface{} {
+       ch := make(chan interface{});
+       go func() {
+               for _, e := range a {
+                       ch <- e
+               }
+               close(ch);
+       }();
+       return ch;
+}
+
+type FloatArray []float
+
+func (a FloatArray) Iter() <-chan interface{} {
+       ch := make(chan interface{});
+       go func() {
+               for _, e := range a {
+                       ch <- e
+               }
+               close(ch);
+       }();
+       return ch;
+}
+
+type StringArray []string
+
+func (a StringArray) Iter() <-chan interface{} {
+       ch := make(chan interface{});
+       go func() {
+               for _, e := range a {
+                       ch <- e
+               }
+               close(ch);
+       }();
+       return ch;
+}
index 1580357eeb32b5a752a7ed72c290520a08f2841b..c6307dca05a119df85a1f5328f572017d95d9f2f 100644 (file)
@@ -8,17 +8,24 @@ import (
        "testing";
 )
 
-type IntArray []int
-
-func (arr IntArray) Iter() <-chan interface{} {
-       ch := make(chan interface{});
-       go func() {
-               for _, x := range arr {
-                       ch <- x
-               }
-               close(ch);
-       }();
-       return ch;
+func TestArrayTypes(t *testing.T) {
+       // Test that conversion works correctly.
+       bytes := ByteArray([]byte{1, 2, 3});
+       if x := Data(bytes)[1].(byte); x != 2 {
+               t.Error("Data(bytes)[1].(byte) = %v, want 2", x)
+       }
+       ints := IntArray([]int{1, 2, 3});
+       if x := Data(ints)[2].(int); x != 3 {
+               t.Error("Data(ints)[2].(int) = %v, want 3", x)
+       }
+       floats := FloatArray([]float{1, 2, 3});
+       if x := Data(floats)[0].(float); x != 1 {
+               t.Error("Data(floats)[0].(float) = %v, want 1", x)
+       }
+       strings := StringArray([]string{"a", "b", "c"});
+       if x := Data(strings)[1].(string); x != "b" {
+               t.Error(`Data(strings)[1].(string) = %q, want "b"`, x)
+       }
 }
 
 var oneToFive = IntArray{1, 2, 3, 4, 5}