diff --git a/iter.go b/iter.go new file mode 100644 index 0000000..7bfd852 --- /dev/null +++ b/iter.go @@ -0,0 +1,15 @@ +//go:build go1.23 + +package orderedmap + +import "iter" + +func (o *OrderedMap) All() iter.Seq2[string, any] { + return func(yield func(key string, value any) bool) { + for _, key := range o.keys { + if !yield(key, o.values[key]) { + break + } + } + } +} diff --git a/iter_test.go b/iter_test.go new file mode 100644 index 0000000..cfa8b77 --- /dev/null +++ b/iter_test.go @@ -0,0 +1,36 @@ +//go:build go1.23 + +package orderedmap + +import "testing" + +func TestAll(t *testing.T) { + o := New() + o.Set("one", 1) + o.Set("two", 2) + o.Set("break", 3) + o.Set("four", 4) + + expectedKeys := []string{"one", "two", "break"} + expectedValues := map[string]any{ + "one": 1, + "two": 2, + "break": 3, + } + i := 0 + for k, v := range o.All() { + if k != expectedKeys[i] { + t.Error("Expected key", expectedKeys[i], "but got", k) + } + if v != expectedValues[k] { + t.Error("Expected value", expectedValues[k], "but got", v) + } + i++ + if k == "break" { + break + } + } + if i != len(expectedKeys) { + t.Error("Expected number of elements", len(expectedKeys), "but got", i) + } +}