int main(void)
{
- hwloc_topology_t topology;
+ hwloc_topology_t topology, reload;
hwloc_bitmap_t cpuset;
hwloc_obj_t obj;
+ char *buf1, *buf2;
+ int buflen1, buflen2, err;
hwloc_topology_init(&topology);
hwloc_topology_load(topology);
hwloc_topology_check(topology);
+
+ /* insert by cpuset below root */
+ cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_copy(cpuset, hwloc_topology_get_topology_cpuset(topology));
+ obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "test by cpuset under root");
+ assert(obj);
+ hwloc_bitmap_free(cpuset);
+
+ /* insert by cpuset below first available PU */
cpuset = hwloc_bitmap_alloc();
hwloc_bitmap_set(cpuset, hwloc_bitmap_first(hwloc_topology_get_topology_cpuset(topology)));
- obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "test");
+ obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "test by cpuset under first available PU");
assert(obj);
hwloc_bitmap_free(cpuset);
- hwloc_topology_insert_misc_object_by_parent(topology, obj, "test2");
+
+ /* insert by parent below root */
+ obj = hwloc_get_root_obj(topology);
+ obj = hwloc_topology_insert_misc_object_by_parent(topology, obj, "test by parent below root");
+ assert(obj);
+
+ /* insert by parent below previous Misc */
+ obj = hwloc_topology_insert_misc_object_by_parent(topology, obj, "test by parent below previous Misc");
+ assert(obj);
+
+ /* insert by parent below first PU */
+ obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+ obj = hwloc_topology_insert_misc_object_by_parent(topology, obj, "test by parent below first PU");
+ assert(obj);
+
hwloc_topology_check(topology);
+
+ /* export, reimport and check things are in consistent state */
+ hwloc_topology_export_xmlbuffer(topology, &buf1, &buflen1);
+ hwloc_topology_init(&reload);
+ hwloc_topology_set_xmlbuffer(reload, buf1, buflen1);
+ hwloc_topology_load(reload);
+ hwloc_topology_export_xmlbuffer(reload, &buf2, &buflen2);
+ assert(buflen1 == buflen2);
+ err = strcmp(buf1, buf2);
+ assert(!err);
+ hwloc_free_xmlbuffer(reload, buf2);
+ hwloc_topology_destroy(reload);
+ hwloc_free_xmlbuffer(topology, buf1);
+
hwloc_topology_destroy(topology);
return 0;