netlist: Fix component refdes mangling
[geda-gaf.git] / tests / storage / set_obdata.c
blob407f04609c9c7c0c041f60ac768466aaf93b30a0
1 /* Copyright (C) 2013-2020 Roland Lutz
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2 of the License, or
6 (at your option) any later version.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software Foundation,
15 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
17 #include <xornstorage.h>
18 #include <assert.h>
19 #include <stdlib.h>
20 #include <string.h>
22 #define NO_ERROR ((xorn_error_t) -1)
25 static void check_not_attached(xorn_revision_t rev,
26 xorn_object_t ob0, xorn_object_t ob1)
28 xorn_object_t *objects;
29 size_t count;
31 assert(xorn_get_objects(rev, &objects, &count) == 0);
32 assert(objects != NULL);
33 assert(count == 2);
34 assert(objects[0] == ob0);
35 assert(objects[1] == ob1);
36 free(objects);
38 assert(xorn_relocate_object(rev, ob0, NULL, NULL, NULL) == 0);
40 assert(xorn_get_objects(rev, &objects, &count) == 0);
41 assert(objects != NULL);
42 assert(count == 2);
43 assert(objects[0] == ob1);
44 assert(objects[1] == ob0);
45 free(objects);
47 assert(xorn_relocate_object(rev, ob0, NULL, ob1, NULL) == 0);
50 static void check_attached(xorn_revision_t rev,
51 xorn_object_t ob0, xorn_object_t ob1)
53 xorn_object_t *objects;
54 size_t count;
56 assert(xorn_get_objects(rev, &objects, &count) == 0);
57 assert(objects != NULL);
58 assert(count == 2);
59 assert(objects[0] == ob0);
60 assert(objects[1] == ob1);
61 free(objects);
63 assert(xorn_relocate_object(rev, ob0, NULL, NULL, NULL) == 0);
65 assert(xorn_get_objects(rev, &objects, &count) == 0);
66 assert(objects != NULL);
67 assert(count == 2);
68 assert(objects[0] == ob0);
69 assert(objects[1] == ob1);
70 free(objects);
73 int main(void)
75 xorn_revision_t rev;
76 xorn_object_t ob0, ob1;
77 xorn_error_t err;
79 struct xornsch_line line_data;
80 struct xornsch_net net_data;
81 struct xornsch_component component_data;
82 struct xornsch_text text_data;
84 memset(&line_data, 0, sizeof line_data);
85 memset(&net_data, 0, sizeof net_data);
86 memset(&component_data, 0, sizeof component_data);
87 memset(&text_data, 0, sizeof text_data);
89 assert(rev = xorn_new_revision(NULL));
90 assert(ob0 = xornsch_add_line(rev, &line_data, NULL));
91 assert(ob1 = xornsch_add_line(rev, &line_data, NULL));
93 assert(xornsch_set_net_data(rev, ob0, &net_data, NULL) == 0);
94 assert(xornsch_set_text_data(rev, ob1, &text_data, NULL) == 0);
96 check_not_attached(rev, ob0, ob1);
99 /* data can be set without the object being reordered */
101 assert(xornsch_set_line_data(rev, ob0, &line_data, NULL) == 0);
102 check_not_attached(rev, ob0, ob1);
103 assert(xornsch_set_net_data(rev, ob0, &net_data, NULL) == 0);
104 check_not_attached(rev, ob0, ob1);
106 assert(xornsch_set_line_data(rev, ob1, &line_data, NULL) == 0);
107 check_not_attached(rev, ob0, ob1);
108 assert(xornsch_set_net_data(rev, ob1, &net_data, NULL) == 0);
109 check_not_attached(rev, ob0, ob1);
111 /* objects are re-added at the end */
113 assert(xorn_delete_object(rev, ob0, NULL) == 0);
114 assert(xornsch_set_line_data(rev, ob0, &line_data, NULL) == 0);
115 check_not_attached(rev, ob1, ob0);
116 assert(xorn_delete_object(rev, ob0, NULL) == 0);
117 assert(xornsch_set_line_data(rev, ob0, &line_data, NULL) == 0);
118 check_not_attached(rev, ob1, ob0);
120 assert(xorn_delete_object(rev, ob1, NULL) == 0);
121 assert(xornsch_set_line_data(rev, ob1, &line_data, NULL) == 0);
122 check_not_attached(rev, ob0, ob1);
123 assert(xorn_delete_object(rev, ob1, NULL) == 0);
124 assert(xornsch_set_line_data(rev, ob1, &line_data, NULL) == 0);
125 check_not_attached(rev, ob0, ob1);
127 assert(xorn_delete_object(rev, ob0, NULL) == 0);
128 assert(xornsch_set_net_data(rev, ob0, &net_data, NULL) == 0);
129 check_not_attached(rev, ob1, ob0);
130 assert(xorn_delete_object(rev, ob0, NULL) == 0);
131 assert(xornsch_set_net_data(rev, ob0, &net_data, NULL) == 0);
132 check_not_attached(rev, ob1, ob0);
134 assert(xorn_delete_object(rev, ob1, NULL) == 0);
135 assert(xornsch_set_net_data(rev, ob1, &net_data, NULL) == 0);
136 check_not_attached(rev, ob0, ob1);
137 assert(xorn_delete_object(rev, ob1, NULL) == 0);
138 assert(xornsch_set_net_data(rev, ob1, &net_data, NULL) == 0);
139 check_not_attached(rev, ob0, ob1);
142 /* can change ob0 to any type while no object is attached */
144 err = NO_ERROR;
145 assert(xornsch_set_line_data(rev, ob0, &line_data, &err) == 0);
146 assert(err == NO_ERROR);
147 check_not_attached(rev, ob0, ob1);
149 err = NO_ERROR;
150 assert(xornsch_set_component_data(
151 rev, ob0, &component_data, &err) == 0);
152 assert(err == NO_ERROR);
153 check_not_attached(rev, ob0, ob1);
155 err = NO_ERROR;
156 assert(xornsch_set_text_data(rev, ob0, &text_data, &err) == 0);
157 assert(err == NO_ERROR);
158 check_not_attached(rev, ob0, ob1);
160 err = NO_ERROR;
161 assert(xornsch_set_net_data(rev, ob0, &net_data, &err) == 0);
162 assert(err == NO_ERROR);
163 check_not_attached(rev, ob0, ob1);
165 /* can change type of ob1 while not attached */
167 err = NO_ERROR;
168 assert(xornsch_set_line_data(rev, ob1, &line_data, &err) == 0);
169 assert(err == NO_ERROR);
170 check_not_attached(rev, ob0, ob1);
172 err = NO_ERROR;
173 assert(xornsch_set_net_data(rev, ob1, &net_data, &err) == 0);
174 assert(err == NO_ERROR);
175 check_not_attached(rev, ob0, ob1);
177 err = NO_ERROR;
178 assert(xornsch_set_component_data(
179 rev, ob1, &component_data, &err) == 0);
180 assert(err == NO_ERROR);
181 check_not_attached(rev, ob0, ob1);
183 err = NO_ERROR;
184 assert(xornsch_set_text_data(rev, ob1, &text_data, &err) == 0);
185 assert(err == NO_ERROR);
186 check_not_attached(rev, ob0, ob1);
189 assert(xorn_relocate_object(rev, ob1, ob0, NULL, NULL) == 0);
190 check_attached(rev, ob0, ob1);
193 /* can't change ob0 to line or text while an object is attached */
195 err = NO_ERROR;
196 assert(xornsch_set_line_data(rev, ob0, &line_data, &err) == -1);
197 assert(err == xorn_error_invalid_existing_child);
198 check_attached(rev, ob0, ob1);
200 err = NO_ERROR;
201 assert(xornsch_set_net_data(rev, ob0, &net_data, &err) == 0);
202 assert(err == NO_ERROR);
203 check_attached(rev, ob0, ob1);
205 err = NO_ERROR;
206 assert(xornsch_set_component_data(
207 rev, ob0, &component_data, &err) == 0);
208 assert(err == NO_ERROR);
209 check_attached(rev, ob0, ob1);
211 err = NO_ERROR;
212 assert(xornsch_set_text_data(rev, ob0, &text_data, &err) == -1);
213 assert(err == xorn_error_invalid_existing_child);
214 check_attached(rev, ob0, ob1);
216 /* can't change type of ob1 while attached */
218 err = NO_ERROR;
219 assert(xornsch_set_line_data(rev, ob1, &line_data, &err) == -1);
220 assert(err == xorn_error_invalid_parent);
221 check_attached(rev, ob0, ob1);
223 err = NO_ERROR;
224 assert(xornsch_set_net_data(rev, ob1, &net_data, &err) == -1);
225 assert(err == xorn_error_invalid_parent);
226 check_attached(rev, ob0, ob1);
228 err = NO_ERROR;
229 assert(xornsch_set_component_data(
230 rev, ob1, &component_data, &err) == -1);
231 assert(err == xorn_error_invalid_parent);
232 check_attached(rev, ob0, ob1);
234 err = NO_ERROR;
235 assert(xornsch_set_text_data(rev, ob1, &text_data, &err) == 0);
236 assert(err == NO_ERROR);
237 check_attached(rev, ob0, ob1);
240 xorn_free_revision(rev);
241 return 0;