| #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.hash); | 
 | 	two = lookup_unknown_object(two_oid.hash); | 
 | 	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.hash); | 
 | 	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; | 
 | } |