void openaddrhtTest() { hashtb *ht; void *val; ht = htCreate(6); assert(ht != NULL); assert(ht->size == 31); assert(ht->used == 0); assert(ht->table != NULL); assert(htSet(ht, "1", "one") == 0); assert(ht->used == 1); val = htGet(ht, "1")->val; assert(strcmp((char*)val, "one") == 0); assert(htSet(ht, "2", "two") == 0); assert(ht->used == 2); assert(htSet(ht, "3", "thee") == 0); val = htGet(ht, "3")->val; assert(strcmp((char*)val, "thee") == 0); assert(ht->used == 3); assert(htSet(ht, "3", "three") == 1); assert(ht->used == 3); val = htGet(ht, "3")->val; assert(strcmp((char*)val, "three") == 0); assert(htGet(ht, "4") == NULL); }
static void readHandler(EV_P_ struct ev_io *watcher, int revents) { if (EV_ERROR & revents) { perror("got invalid event"); return; } char buffer[BUFFER_SIZE]; int n = recv(watcher->fd, buffer, BUFFER_SIZE, 0); int i; for (i = 0; i < n; i++) if (buffer[i] == '\n') buffer[i] = 0; if (n < 0) { perror("read error"); return; } if (n == 0) { ev_io_stop(loop, watcher); close(watcher->fd); free(watcher); printf("Client closed, %d client(s) connected.\n", --totalClients); return; } else printf("Client sended: %s\n", buffer); struct gvtData gvtData; gvtExtract(buffer, &gvtData); printf("Received from %s\n", gvtData.name); int *res = (int*)htGet(htImeiSequence, gvtData.imei); int sequence = res == NULL? 1 : *res; printf("%d %s\n", sequence, gvtData.imei); char command[256]; genRedisInsertCommand(command, &gvtData, sequence++); printf("sending to redis: %s\n", command); redisAsyncCommand(redisCtx, NULL, NULL, command); printf("set %s %d\n", gvtData.imei, sequence); htSet(htImeiSequence, gvtData.imei, &sequence, sizeof(int)); printf("%d\n", sizeof(int)); }
void testHashtable() { struct hashtable *ht = htCreate(65536); htSet(ht, "key1", "inky", strlen("inky") + 1); htSet(ht, "key2", "pinky", strlen("pingky") + 1); htSet(ht, "key3", "blinky", strlen("blinky") + 1); htSet(ht, "key4", "floyd", strlen("floyd") + 1); expect("hash key1 is inky", strcmp(htGet(ht, "key1"), "inky") == 0); expect("hash key2 is pinky", strcmp(htGet(ht, "key2"), "pinky") == 0); expect("hash key3 is blinky", strcmp(htGet(ht, "key3"), "blinky") == 0); expect("hash key4 is floyd", strcmp(htGet(ht, "key4"), "floyd") == 0); htSet(ht, "key1", "new-inky", strlen("new-inky") + 1); htSet(ht, "key2", "new-pinky", strlen("new-pinky") + 1); htSet(ht, "key3", "new-blinky", strlen("new-blinky") + 1); htSet(ht, "key4", "new-floyd", strlen("new-floyd") + 1); expect("hash key1 is new-inky", strcmp(htGet(ht, "key1"), "new-inky") == 0); expect("hash key2 is new-pinky", strcmp(htGet(ht, "key2"), "new-pinky") == 0); expect("hash key3 is new-blinky", strcmp(htGet(ht, "key3"), "new-blinky") == 0); expect("hash key4 is new-floyd", strcmp(htGet(ht, "key4"), "new-floyd") == 0); int n = 5; htSet(ht, "key5", &n, sizeof(int)); n++; htSet(ht, "key6", &n, sizeof(int)); n++; htSet(ht, "key7", &n, sizeof(int)); n++; htSet(ht, "key8", &n, sizeof(int)); n++; expect("hash key5 is 5", *htGet(ht, "key5") == 5); expect("hash key6 is 6", *htGet(ht, "key6") == 6); expect("hash key7 is 7", *htGet(ht, "key7") == 7); expect("hash key8 is 8", *htGet(ht, "key8") == 8); n = 50; htSet(ht, "key5", &n, sizeof(int)); n++; htSet(ht, "key6", &n, sizeof(int)); n++; htSet(ht, "key7", &n, sizeof(int)); n++; htSet(ht, "key8", &n, sizeof(int)); n++; expect("hash key5 is 50", *htGet(ht, "key5") == 50); expect("hash key6 is 51", *htGet(ht, "key6") == 51); expect("hash key7 is 52", *htGet(ht, "key7") == 52); expect("hash key8 is 53", *htGet(ht, "key8") == 53); struct gvtData *data; struct gvtData gvtData; strcpy(gvtData.imei, "IMEI"); gvtData.speed = 500.f; htSet(ht, "key9", &gvtData, sizeof(gvtData)); strcpy(gvtData.imei, "imei"); gvtData.speed = 1000.f; htSet(ht, "key10", &gvtData, sizeof(gvtData)); data = (struct gvtData*)htGet(ht, "key9"); expect("hash key9 imei is IMEI", strcmp(data->imei, "IMEI") == 0); expect("hash key9 speed is 500.f", data->speed == 500.f); data = (struct gvtData*)htGet(ht, "key10"); expect("hash key10 imei is imei", strcmp(data->imei, "imei") == 0); expect("hash key10 speed is 1000.f", data->speed == 1000.f); strcpy(gvtData.imei, "new-IMEI"); gvtData.speed = 5000.f; htSet(ht, "key9", &gvtData, sizeof(gvtData)); strcpy(gvtData.imei, "new-imei"); gvtData.speed = 10000.f; htSet(ht, "key10", &gvtData, sizeof(gvtData)); data = (struct gvtData*)htGet(ht, "key9"); expect("hash key9 imei is new-IMEI", strcmp(data->imei, "new-IMEI") == 0); expect("hash key9 speed is 5000.f", data->speed == 5000.f); data = (struct gvtData*)htGet(ht, "key10"); expect("hash key10 imei is new-imei", strcmp(data->imei, "new-imei") == 0); expect("hash key10 speed is 10000.f", data->speed == 10000.f); }