#include "test-tool.h" #include "cache.h" #include "object.h" #include "decorate.h" int cmd__example_decorate(int argc, const char **argv) { struct decoration n; struct object_id one_oid = { {1} }; struct object_id two_oid = { {2} }; struct object_id three_oid = { {3} }; struct object *one, *two, *three; int decoration_a, decoration_b; void *ret; int i, objects_noticed = 0; /* * The struct must be zero-initialized. */ memset(&n, 0, sizeof(n)); /* * Add 2 objects, one with a non-NULL decoration and one with a NULL * decoration. */ one = lookup_unknown_object(&one_oid); two = lookup_unknown_object(&two_oid); ret = add_decoration(&n, one, &decoration_a); if (ret) BUG("when adding a brand-new object, NULL should be returned"); ret = add_decoration(&n, two, NULL); if (ret) BUG("when adding a brand-new object, NULL should be returned"); /* * When re-adding an already existing object, the old decoration is * returned. */ ret = add_decoration(&n, one, NULL); if (ret != &decoration_a) BUG("when readding an already existing object, existing decoration should be returned"); ret = add_decoration(&n, two, &decoration_b); if (ret) BUG("when readding an already existing object, existing decoration should be returned"); /* * Lookup returns the added declarations, or NULL if the object was * never added. */ ret = lookup_decoration(&n, one); if (ret) BUG("lookup should return added declaration"); ret = lookup_decoration(&n, two); if (ret != &decoration_b) BUG("lookup should return added declaration"); three = lookup_unknown_object(&three_oid); ret = lookup_decoration(&n, three); if (ret) BUG("lookup for unknown object should return NULL"); /* * The user can also loop through all entries. */ for (i = 0; i < n.size; i++) { if (n.entries[i].base) objects_noticed++; } if (objects_noticed != 2) BUG("should have 2 objects"); return 0; }