+
+static uint32_t hash_int(const void *p)
+{
+ int i = *(const int *)p;
+ return i;
+}
+
+static bool cmp_int(const void *p1, const void *p2)
+{
+ int i1 = *(const int *)p1, i2 = *(const int *)p2;
+ return i1 == i2;
+}
+
+TEST(set, search_or_add)
+{
+ struct set *s = _mesa_set_create(NULL, hash_int, cmp_int);
+
+ int a = 10, b = 20, c = 20, d = 30;
+
+ _mesa_set_add(s, &a);
+ _mesa_set_add(s, &b);
+ EXPECT_EQ(s->entries, 2);
+
+ struct set_entry *entry = _mesa_set_search_or_add(s, &c);
+ EXPECT_EQ(entry->key, (void *)&b);
+ EXPECT_EQ(s->entries, 2);
+
+ struct set_entry *entry3 = _mesa_set_search_or_add(s, &d);
+ EXPECT_EQ(entry3->key, &d);
+ EXPECT_EQ(s->entries, 3);
+
+ _mesa_set_destroy(s, NULL);
+}