Exemplo n.º 1
0
void test_sparse_estimate_cardinality() {
    uint b = 10;
    Hyperloglog *hll = mock_sparse_hll(b);
    sassert(3 == estimate_cardinality(hll));
    update_sparse_list(hll, 54, 20);
    sassert(4 == estimate_cardinality(hll));

    for (int i = 100; i < 150; i++) {
        update_sparse_list(hll, i, i % 20);
    }

    sassert(52 == estimate_cardinality(hll));
    free(hll);
}
Exemplo n.º 2
0
void test_estimate_cardinality() {
    uint b = 10;
    Hyperloglog *hll = mock_hll(b);
    sassert(3 == estimate_cardinality(hll));
    hll->M[54] = 20;
    sassert(4 == estimate_cardinality(hll));

    for (int i = 100; i < 150; i++) {
        hll->M[i] = i % 20;
    }

    sassert(52 == estimate_cardinality(hll));
    free(hll);
}
Exemplo n.º 3
0
void
run_test(enum test_type t_type, uint8_t use_hashes)
{
        uint64_t i;
        uint64_t is_member_count;
        uint64_t rnd_nbr;
        char *type;
        uint64_t set_bits;
        struct timeval tval_before, tval_after, tval_result;

        /* insertion */
        create_filter(filter_size, use_hashes);

        gettimeofday(&tval_before, NULL);
        switch (t_type) {
                case EVEN_UNEVEN:
                        type = "un/even";
                        for (i = 1; i < insert_size << 1; i += 2) {
                                insert_key((char *)&i, 8);
                        }
                        break;
                case RANDOM:
                        type = "random";
                        for (i = 0; i < insert_size; i++) {
                                rnd_nbr = arc4random();
                                rnd_nbr = rnd_nbr << 32;
                                rnd_nbr = rnd_nbr | arc4random();
                                insert_key((char *)&rnd_nbr, 8);
                        }
                        break;
                case COUNTING:
                        type = "counting";
                        for (i = 0; i < insert_size; i++) {
                                insert_key((char *)&i, 8);
                        }
                        break;
                default:
                        /* not reached */
                        type = "";
                        break;
        }
        gettimeofday(&tval_after, NULL);
        timersub(&tval_after, &tval_before, &tval_result);

        /* testing */
        is_member_count = 0;
        switch (t_type) {
                case EVEN_UNEVEN:
                        for (i = 0; i < insert_size << 1; i += 2) {
                                if (is_member((char *)&i, 8)) {
                                        is_member_count++;
                                }
                        }
                        break;
                case RANDOM:
                        for (i = 0; i < insert_size; i++) {
                                rnd_nbr = arc4random();
                                rnd_nbr = rnd_nbr << 32;
                                rnd_nbr = rnd_nbr | arc4random();
                                if (is_member((char *)&rnd_nbr, 8)) {
                                        is_member_count++;
                                }
                        }
                        break;
                case COUNTING:
                        for (i = insert_size; i < insert_size << 1; i++) {
                                if (is_member((char *)&i, 8)) {
                                        is_member_count++;
                                }
                        }
                        break;
                default:
                        /* not reached */
                        break;
        }

        set_bits = estimate_cardinality();

        /* print info */
        printf("%-8s: ins time: %2ld.%-6ld false pos: %6.2f%% (%10lu) fill factor: %6.2f%% (%10lu) err rate: %6.2f%% (%10lu)\n",
            type,
            (long int)tval_result.tv_sec,
            (long int)tval_result.tv_usec,
            (double)is_member_count / (double)insert_size * 100.0,
            is_member_count,
            (double)set_bits / (double)filter_size * 100.0,
            set_bits,
            (double)(insert_size * K - set_bits) / (double)(insert_size * K) * 100.0,
            insert_size * K - set_bits);
}