18f822af9b234e7c553c408eba65a641c4773457fbart/** @brief Unit-test for DRD's vector clock implementation. */
28f822af9b234e7c553c408eba65a641c4773457fbart
38f822af9b234e7c553c408eba65a641c4773457fbart
48f822af9b234e7c553c408eba65a641c4773457fbart#include <assert.h>
58f822af9b234e7c553c408eba65a641c4773457fbart#include <stdio.h>
68f822af9b234e7c553c408eba65a641c4773457fbart#include <stdlib.h>
78f822af9b234e7c553c408eba65a641c4773457fbart#include <string.h>
88f822af9b234e7c553c408eba65a641c4773457fbart#include "drd/drd_vc.c"
98f822af9b234e7c553c408eba65a641c4773457fbart
108f822af9b234e7c553c408eba65a641c4773457fbart
118f822af9b234e7c553c408eba65a641c4773457fbart/* Replacements for Valgrind core functionality. */
128f822af9b234e7c553c408eba65a641c4773457fbart
1354fe2021b87b9e5edb8ec8070f47b86d5cafb8aaflorianvoid* VG_(malloc)(const HChar* cc, SizeT nbytes)
148f822af9b234e7c553c408eba65a641c4773457fbart{ return malloc(nbytes); }
1554fe2021b87b9e5edb8ec8070f47b86d5cafb8aaflorianvoid* VG_(realloc)(const HChar* cc, void* p, SizeT size)
168f822af9b234e7c553c408eba65a641c4773457fbart{ return realloc(p, size); }
178f822af9b234e7c553c408eba65a641c4773457fbartvoid  VG_(free)(void* p)
188f822af9b234e7c553c408eba65a641c4773457fbart{ return free(p); }
19567f72e1e092b906fcb27e6b05a8b0635e172140florianvoid  VG_(assert_fail)(Bool isCore, const HChar* assertion, const HChar* file,
20567f72e1e092b906fcb27e6b05a8b0635e172140florian                       Int line, const HChar* function, const HChar* format,
218f822af9b234e7c553c408eba65a641c4773457fbart                       ...)
228f822af9b234e7c553c408eba65a641c4773457fbart{
238f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr,
248f822af9b234e7c553c408eba65a641c4773457fbart          "%s:%u: %s%sAssertion `%s' failed.\n",
258f822af9b234e7c553c408eba65a641c4773457fbart          file,
268f822af9b234e7c553c408eba65a641c4773457fbart          line,
278f822af9b234e7c553c408eba65a641c4773457fbart          function ? (char*)function : "",
288f822af9b234e7c553c408eba65a641c4773457fbart          function ? ": " : "",
298f822af9b234e7c553c408eba65a641c4773457fbart          assertion);
308f822af9b234e7c553c408eba65a641c4773457fbart  fflush(stdout);
318f822af9b234e7c553c408eba65a641c4773457fbart  fflush(stderr);
328f822af9b234e7c553c408eba65a641c4773457fbart  abort();
338f822af9b234e7c553c408eba65a641c4773457fbart}
348f822af9b234e7c553c408eba65a641c4773457fbart
358f822af9b234e7c553c408eba65a641c4773457fbartvoid* VG_(memset)(void *s, Int c, SizeT sz)
368f822af9b234e7c553c408eba65a641c4773457fbart{ return memset(s, c, sz); }
378f822af9b234e7c553c408eba65a641c4773457fbartvoid* VG_(memcpy)(void *d, const void *s, SizeT sz)
388f822af9b234e7c553c408eba65a641c4773457fbart{ return memcpy(d, s, sz); }
398f822af9b234e7c553c408eba65a641c4773457fbartInt VG_(memcmp)(const void* s1, const void* s2, SizeT n)
408f822af9b234e7c553c408eba65a641c4773457fbart{ return memcmp(s1, s2, n); }
418f822af9b234e7c553c408eba65a641c4773457fbartUInt VG_(printf)(const HChar *format, ...)
428f822af9b234e7c553c408eba65a641c4773457fbart{ UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); return ret; }
43dbb3584f591710a15a437918c0fc27e300993566florianUInt VG_(snprintf)(HChar* buf, Int size, const HChar *format, ...)
448f822af9b234e7c553c408eba65a641c4773457fbart{ UInt ret; va_list vargs; va_start(vargs, format); ret = vsnprintf(buf, size, format, vargs); va_end(vargs); return ret; }
4519f91bbaedb4caef8a60ce94b0f507193cc0bc10florianSizeT VG_(strlen)(const HChar* str) { return strlen(str); }
468f822af9b234e7c553c408eba65a641c4773457fbartUInt VG_(message)(VgMsgKind kind, const HChar* format, ...)
478f822af9b234e7c553c408eba65a641c4773457fbart{ UInt ret; va_list vargs; va_start(vargs, format); ret = vprintf(format, vargs); va_end(vargs); printf("\n"); return ret; }
488f822af9b234e7c553c408eba65a641c4773457fbartBool DRD_(is_suppressed)(const Addr a1, const Addr a2)
498f822af9b234e7c553c408eba65a641c4773457fbart{ assert(0); }
508f822af9b234e7c553c408eba65a641c4773457fbart
518f822af9b234e7c553c408eba65a641c4773457fbart
528f822af9b234e7c553c408eba65a641c4773457fbart/* Actual unit test */
538f822af9b234e7c553c408eba65a641c4773457fbart
548f822af9b234e7c553c408eba65a641c4773457fbartstatic void vc_unittest(void)
558f822af9b234e7c553c408eba65a641c4773457fbart{
568f822af9b234e7c553c408eba65a641c4773457fbart  int i;
578f822af9b234e7c553c408eba65a641c4773457fbart  char *str;
588f822af9b234e7c553c408eba65a641c4773457fbart  VectorClock vc1;
598f822af9b234e7c553c408eba65a641c4773457fbart  VCElem vc1elem[] = { { 3, 7 }, { 5, 8 }, };
608f822af9b234e7c553c408eba65a641c4773457fbart  VectorClock vc2;
618f822af9b234e7c553c408eba65a641c4773457fbart  VCElem vc2elem[] = { { 1, 4 }, { 3, 9 }, };
628f822af9b234e7c553c408eba65a641c4773457fbart  VectorClock vc3;
638f822af9b234e7c553c408eba65a641c4773457fbart  VCElem vc4elem[] = { { 1, 3 }, { 2, 1 }, };
648f822af9b234e7c553c408eba65a641c4773457fbart  VectorClock vc4;
658f822af9b234e7c553c408eba65a641c4773457fbart  VCElem vc5elem[] = { { 1, 4 }, };
668f822af9b234e7c553c408eba65a641c4773457fbart  VectorClock vc5;
678f822af9b234e7c553c408eba65a641c4773457fbart
688f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_init)(&vc1, vc1elem, sizeof(vc1elem)/sizeof(vc1elem[0]));
698f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_init)(&vc2, vc2elem, sizeof(vc2elem)/sizeof(vc2elem[0]));
708f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_init)(&vc3, 0, 0);
718f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_init)(&vc4, vc4elem, sizeof(vc4elem)/sizeof(vc4elem[0]));
728f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_init)(&vc5, vc5elem, sizeof(vc5elem)/sizeof(vc5elem[0]));
738f822af9b234e7c553c408eba65a641c4773457fbart
748f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_combine)(&vc3, &vc1);
758f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_combine)(&vc3, &vc2);
768f822af9b234e7c553c408eba65a641c4773457fbart
778f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "vc1: %s", (str = DRD_(vc_aprint)(&vc1)));
788f822af9b234e7c553c408eba65a641c4773457fbart  free(str);
798f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "\nvc2: %s", (str = DRD_(vc_aprint)(&vc2)));
808f822af9b234e7c553c408eba65a641c4773457fbart  free(str);
818f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "\nvc3: %s", (str = DRD_(vc_aprint)(&vc3)));
828f822af9b234e7c553c408eba65a641c4773457fbart  free(str);
838f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "\n");
848f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "vc_lte(vc1, vc2) = %d, vc_lte(vc1, vc3) = %d,"
858f822af9b234e7c553c408eba65a641c4773457fbart          " vc_lte(vc2, vc3) = %d\nvc_lte(",
868f822af9b234e7c553c408eba65a641c4773457fbart          DRD_(vc_lte)(&vc1, &vc2), DRD_(vc_lte)(&vc1, &vc3),
878f822af9b234e7c553c408eba65a641c4773457fbart          DRD_(vc_lte)(&vc2, &vc3));
888f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "%s", (str = DRD_(vc_aprint)(&vc4)));
898f822af9b234e7c553c408eba65a641c4773457fbart  free(str);
908f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, ", ");
918f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, "%s", (str = DRD_(vc_aprint)(&vc5)));
928f822af9b234e7c553c408eba65a641c4773457fbart  free(str);
938f822af9b234e7c553c408eba65a641c4773457fbart  fprintf(stderr, ") = %d sw %d\n",
948f822af9b234e7c553c408eba65a641c4773457fbart          DRD_(vc_lte)(&vc4, &vc5), DRD_(vc_lte)(&vc5, &vc4));
958f822af9b234e7c553c408eba65a641c4773457fbart
968f822af9b234e7c553c408eba65a641c4773457fbart  for (i = 0; i < 64; i++)
978f822af9b234e7c553c408eba65a641c4773457fbart    DRD_(vc_reserve)(&vc1, i);
988f822af9b234e7c553c408eba65a641c4773457fbart  for (i = 64; i > 0; i--)
998f822af9b234e7c553c408eba65a641c4773457fbart    DRD_(vc_reserve)(&vc1, i);
1008f822af9b234e7c553c408eba65a641c4773457fbart
1018f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_cleanup)(&vc1);
1028f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_cleanup)(&vc2);
1038f822af9b234e7c553c408eba65a641c4773457fbart  DRD_(vc_cleanup)(&vc3);
1048f822af9b234e7c553c408eba65a641c4773457fbart}
1058f822af9b234e7c553c408eba65a641c4773457fbart
1068f822af9b234e7c553c408eba65a641c4773457fbartint main(int argc, char** argv)
1078f822af9b234e7c553c408eba65a641c4773457fbart{
1088f822af9b234e7c553c408eba65a641c4773457fbart  vc_unittest();
1098f822af9b234e7c553c408eba65a641c4773457fbart  return 0;
1108f822af9b234e7c553c408eba65a641c4773457fbart}
111