1// Copyright 2024 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package maps
6
7import (
8	"slices"
9	"testing"
10)
11
12func TestAll(t *testing.T) {
13	for size := 0; size < 10; size++ {
14		m := make(map[int]int)
15		for i := range size {
16			m[i] = i
17		}
18		cnt := 0
19		for i, v := range All(m) {
20			v1, ok := m[i]
21			if !ok || v != v1 {
22				t.Errorf("at iteration %d got %d, %d want %d, %d", cnt, i, v, i, v1)
23			}
24			cnt++
25		}
26		if cnt != size {
27			t.Errorf("read %d values expected %d", cnt, size)
28		}
29	}
30}
31
32func TestKeys(t *testing.T) {
33	for size := 0; size < 10; size++ {
34		var want []int
35		m := make(map[int]int)
36		for i := range size {
37			m[i] = i
38			want = append(want, i)
39		}
40
41		var got []int
42		for k := range Keys(m) {
43			got = append(got, k)
44		}
45		slices.Sort(got)
46		if !slices.Equal(got, want) {
47			t.Errorf("Keys(%v) = %v, want %v", m, got, want)
48		}
49	}
50}
51
52func TestValues(t *testing.T) {
53	for size := 0; size < 10; size++ {
54		var want []int
55		m := make(map[int]int)
56		for i := range size {
57			m[i] = i
58			want = append(want, i)
59		}
60
61		var got []int
62		for v := range Values(m) {
63			got = append(got, v)
64		}
65		slices.Sort(got)
66		if !slices.Equal(got, want) {
67			t.Errorf("Values(%v) = %v, want %v", m, got, want)
68		}
69	}
70}
71
72func TestInsert(t *testing.T) {
73	got := map[int]int{
74		1: 1,
75		2: 1,
76	}
77	Insert(got, func(yield func(int, int) bool) {
78		for i := 0; i < 10; i += 2 {
79			if !yield(i, i+1) {
80				return
81			}
82		}
83	})
84
85	want := map[int]int{
86		1: 1,
87		2: 1,
88	}
89	for i, v := range map[int]int{
90		0: 1,
91		2: 3,
92		4: 5,
93		6: 7,
94		8: 9,
95	} {
96		want[i] = v
97	}
98
99	if !Equal(got, want) {
100		t.Errorf("Insert got: %v, want: %v", got, want)
101	}
102}
103
104func TestCollect(t *testing.T) {
105	m := map[int]int{
106		0: 1,
107		2: 3,
108		4: 5,
109		6: 7,
110		8: 9,
111	}
112	got := Collect(All(m))
113	if !Equal(got, m) {
114		t.Errorf("Collect got: %v, want: %v", got, m)
115	}
116}
117