1 | /* |
2 | * Copyright © 2012 Intel Corporation |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining |
5 | * a copy of this software and associated documentation files (the |
6 | * "Software"), to deal in the Software without restriction, including |
7 | * without limitation the rights to use, copy, modify, merge, publish, |
8 | * distribute, sublicense, and/or sell copies of the Software, and to |
9 | * permit persons to whom the Software is furnished to do so, subject to |
10 | * the following conditions: |
11 | * |
12 | * The above copyright notice and this permission notice (including the |
13 | * next paragraph) shall be included in all copies or substantial |
14 | * portions of the Software. |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
17 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
19 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
20 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
21 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
22 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
23 | * SOFTWARE. |
24 | */ |
25 | |
26 | #include <stdio.h> |
27 | #include <stdlib.h> |
28 | #include <stdint.h> |
29 | #include <assert.h> |
30 | #include "wayland-private.h" |
31 | #include "test-runner.h" |
32 | |
33 | TEST(map_insert_new) |
34 | { |
35 | struct wl_map map; |
36 | uint32_t i, j, k, a, b, c; |
37 | |
38 | wl_map_init(map: &map, WL_MAP_SERVER_SIDE); |
39 | i = wl_map_insert_new(map: &map, flags: 0, data: &a); |
40 | j = wl_map_insert_new(map: &map, flags: 0, data: &b); |
41 | k = wl_map_insert_new(map: &map, flags: 0, data: &c); |
42 | assert(i == WL_SERVER_ID_START); |
43 | assert(j == WL_SERVER_ID_START + 1); |
44 | assert(k == WL_SERVER_ID_START + 2); |
45 | |
46 | assert(wl_map_lookup(&map, i) == &a); |
47 | assert(wl_map_lookup(&map, j) == &b); |
48 | assert(wl_map_lookup(&map, k) == &c); |
49 | wl_map_release(map: &map); |
50 | |
51 | wl_map_init(map: &map, WL_MAP_CLIENT_SIDE); |
52 | i = wl_map_insert_new(map: &map, flags: 0, data: &a); |
53 | assert(i == 0); |
54 | assert(wl_map_lookup(&map, i) == &a); |
55 | |
56 | wl_map_release(map: &map); |
57 | } |
58 | |
59 | TEST(map_insert_at) |
60 | { |
61 | struct wl_map map; |
62 | uint32_t a, b, c; |
63 | |
64 | wl_map_init(map: &map, WL_MAP_CLIENT_SIDE); |
65 | assert(wl_map_insert_at(&map, 0, WL_SERVER_ID_START, &a) == 0); |
66 | assert(wl_map_insert_at(&map, 0, WL_SERVER_ID_START + 3, &b) == -1); |
67 | assert(wl_map_insert_at(&map, 0, WL_SERVER_ID_START + 1, &c) == 0); |
68 | |
69 | assert(wl_map_lookup(&map, WL_SERVER_ID_START) == &a); |
70 | assert(wl_map_lookup(&map, WL_SERVER_ID_START + 1) == &c); |
71 | |
72 | wl_map_release(map: &map); |
73 | } |
74 | |
75 | TEST(map_remove) |
76 | { |
77 | struct wl_map map; |
78 | uint32_t i, j, k, l, a, b, c, d; |
79 | |
80 | wl_map_init(map: &map, WL_MAP_SERVER_SIDE); |
81 | i = wl_map_insert_new(map: &map, flags: 0, data: &a); |
82 | j = wl_map_insert_new(map: &map, flags: 0, data: &b); |
83 | k = wl_map_insert_new(map: &map, flags: 0, data: &c); |
84 | assert(i == WL_SERVER_ID_START); |
85 | assert(j == WL_SERVER_ID_START + 1); |
86 | assert(k == WL_SERVER_ID_START + 2); |
87 | |
88 | assert(wl_map_lookup(&map, i) == &a); |
89 | assert(wl_map_lookup(&map, j) == &b); |
90 | assert(wl_map_lookup(&map, k) == &c); |
91 | |
92 | wl_map_remove(map: &map, i: j); |
93 | assert(wl_map_lookup(&map, j) == NULL); |
94 | |
95 | /* Verify that we insert d at the hole left by removing b */ |
96 | l = wl_map_insert_new(map: &map, flags: 0, data: &d); |
97 | assert(l == WL_SERVER_ID_START + 1); |
98 | assert(wl_map_lookup(&map, l) == &d); |
99 | |
100 | wl_map_release(map: &map); |
101 | } |
102 | |
103 | TEST(map_flags) |
104 | { |
105 | struct wl_map map; |
106 | uint32_t i, j, a, b; |
107 | |
108 | wl_map_init(map: &map, WL_MAP_SERVER_SIDE); |
109 | i = wl_map_insert_new(map: &map, flags: 0, data: &a); |
110 | j = wl_map_insert_new(map: &map, flags: 1, data: &b); |
111 | assert(i == WL_SERVER_ID_START); |
112 | assert(j == WL_SERVER_ID_START + 1); |
113 | |
114 | assert(wl_map_lookup(&map, i) == &a); |
115 | assert(wl_map_lookup(&map, j) == &b); |
116 | |
117 | assert(wl_map_lookup_flags(&map, i) == 0); |
118 | assert(wl_map_lookup_flags(&map, j) == 1); |
119 | |
120 | wl_map_release(map: &map); |
121 | } |
122 | |
123 | static enum wl_iterator_result never_run(void *element, void *data, uint32_t flags) |
124 | { |
125 | assert(0); |
126 | } |
127 | |
128 | TEST(map_iter_empty) |
129 | { |
130 | struct wl_map map; |
131 | |
132 | wl_map_init(map: &map, WL_MAP_SERVER_SIDE); |
133 | |
134 | wl_map_for_each(map: &map, func: never_run, NULL); |
135 | |
136 | wl_map_release(map: &map); |
137 | } |
138 | |