run-copy.c 869 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <ccan/htable/htable.h>
  2. #include <ccan/htable/htable.c>
  3. #include <ccan/tap/tap.h>
  4. #include <stdbool.h>
  5. #include <string.h>
  6. #define NUM_VALS 512
  7. static size_t hash(const void *elem, void *unused)
  8. {
  9. size_t h = *(uint64_t *)elem / 2;
  10. return h;
  11. }
  12. static bool cmp(const void *candidate, void *ptr)
  13. {
  14. return *(const uint64_t *)candidate == *(const uint64_t *)ptr;
  15. }
  16. int main(void)
  17. {
  18. struct htable ht, ht2;
  19. uint64_t val[NUM_VALS], i;
  20. plan_tests((NUM_VALS) * 3);
  21. for (i = 0; i < NUM_VALS; i++)
  22. val[i] = i;
  23. htable_init(&ht, hash, NULL);
  24. for (i = 0; i < NUM_VALS; i++) {
  25. ok1(ht.max >= i);
  26. ok1(ht.max <= i * 2);
  27. htable_add(&ht, hash(&val[i], NULL), &val[i]);
  28. }
  29. htable_copy(&ht2, &ht);
  30. htable_clear(&ht);
  31. for (i = 0; i < NUM_VALS; i++)
  32. ok1(htable_get(&ht2, hash(&i, NULL), cmp, &i) == &val[i]);
  33. htable_clear(&ht2);
  34. return exit_status();
  35. }