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