From 4e3198fb22744d44e6dfda9524f4ad5e5670fac1 Mon Sep 17 00:00:00 2001 From: Shuta Kimura Date: Mon, 26 Jan 2026 14:16:59 +0900 Subject: [PATCH] Add iterator All() support (for Go >= 1.23) --- iter.go | 15 +++++++++++++++ iter_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 iter.go create mode 100644 iter_test.go 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) + } +}