#include #include #include #include #include #include #include #include #include #define CHECK(expr) do { \ if (!(expr)) { \ fprintf(stderr, "CHECK failed: %s:%d: %s\n", __FILE__, __LINE__, #expr); \ return EXIT_FAILURE; \ } \ } while (0) int main(void) { MyCache_s mycache; Buffer_s *buffer; Buffer_s *found; configStartup(); nssInitializeSpinLockCode(); CHECK(COMN_RegisterLibraryResourceTags("nwnss.cache") == zOK); MPKNSS_LOCK(); CHECK(CACHE_Startup() == zOK); CHECK(NUM_RESOURCES() == -PRERESERVE_FOR_BEAST_FLUSH); INC_RSRC_CHECK(PRERESERVE_FOR_BEAST_FLUSH + NAME_RESERVE); CHECK(HAVE_RESOURCES(NAME_RESERVE - 1)); RESERVE_RSRC(NAME_RESERVE); CHECK(NUM_RESOURCES() == 0); RELEASE_RSRC(NAME_RESERVE); CHECK(NUM_RESOURCES() == NAME_RESERVE); initMyCache(&mycache, NULL, 12, "cache-test"); buffer = cacheAllocBuffer(&mycache, 7, 11, defaultSignal, CACHE_WRITE); CHECK(buffer != NULL); CHECK(buffer->pBuf.data != NULL); CHECK(buffer->pBuf.mycache == &mycache); CHECK(buffer->pBuf.fileBlk == 7); strcpy((char *)buffer->pBuf.data, "mars-nwe"); cacheMarkDirty(buffer); CHECK((buffer->state & CACHE_DIRTY) != 0); cacheFlush(buffer); CHECK((buffer->state & CACHE_DIRTY) == 0); CACHE_RELEASE(buffer); found = cacheFind(&mycache, 7); CHECK(found == buffer); cacheTossIfThere(&mycache, 7); CHECK(cacheFind(&mycache, 7) == NULL); CACHE_Shutdown(); MPKNSS_UNLOCK(); return EXIT_SUCCESS; }