go/types/mapsets: implement OrderedMap.{Count,Clear}

Change-Id: Iaee5b914fe63ee7a60f796ef986535f6f8e72960
Reviewed-on: https://review.monogon.dev/c/monogon/+/2302
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/go/types/mapsets/orderedmap.go b/go/types/mapsets/orderedmap.go
index bbcbedd..8224268 100644
--- a/go/types/mapsets/orderedmap.go
+++ b/go/types/mapsets/orderedmap.go
@@ -139,6 +139,17 @@
 	delete(s.values, k)
 }
 
+// Clear removes all keys/values from the OrderedMap.
+func (s *OrderedMap[K, V]) Clear() {
+	s.keys = nil
+	s.values = nil
+}
+
+// Count returns the number of keys/values in this OrderedMap.
+func (s *OrderedMap[K, V]) Count() int {
+	return len(s.keys)
+}
+
 // Clone (perform a deep copy) of the OrderedMap, copying all keys and values.
 func (s *OrderedMap[K, V]) Clone() OrderedMap[K, V] {
 	// Short-circuit clone of empty map.
diff --git a/go/types/mapsets/orderedmap_test.go b/go/types/mapsets/orderedmap_test.go
index bb93dfd..8bb3c55 100644
--- a/go/types/mapsets/orderedmap_test.go
+++ b/go/types/mapsets/orderedmap_test.go
@@ -29,6 +29,13 @@
 	keysEq := func(m *OrderedMap[string, string], keystring string) {
 		t.Helper()
 		keys := strings.Split(keystring, ",")
+		// Support keystring "" indicating an empty map is expected.
+		if len(keystring) == 0 {
+			keys = nil
+		}
+		if want, got := len(keys), m.Count(); want != got {
+			t.Errorf("Wanted count %d, got %d", want, got)
+		}
 		if want, got := keys, m.Keys(); len(want) == len(got) {
 			for i, k := range want {
 				if got[i] != k {
@@ -74,6 +81,9 @@
 			}
 		}
 	}
+	// Test Clear
+	n.Clear()
+	keysEq(&n, "")
 }
 
 // TestCycleIterator exercises the CycleIterator.