Example #1
0
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);
}
Example #2
0
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));
}
Example #3
0
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);
}