1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc.  See LICENSE. */
250aadb33SDmitri Tikhonov#include <assert.h>
350aadb33SDmitri Tikhonov#include <stdio.h>
450aadb33SDmitri Tikhonov#include <stdlib.h>
550aadb33SDmitri Tikhonov#include <string.h>
650aadb33SDmitri Tikhonov
750aadb33SDmitri Tikhonov#include "lsquic_set.h"
850aadb33SDmitri Tikhonov
950aadb33SDmitri Tikhonovstatic void
1050aadb33SDmitri Tikhonovtest_lsquic_set32 (void)
1150aadb33SDmitri Tikhonov{
1250aadb33SDmitri Tikhonov    lsquic_set32_t set;
1350aadb33SDmitri Tikhonov    int i, s;
1450aadb33SDmitri Tikhonov
1550aadb33SDmitri Tikhonov    lsquic_set32_init(&set);
1650aadb33SDmitri Tikhonov
1750aadb33SDmitri Tikhonov    for (i = 2; i < 100; ++i)
1850aadb33SDmitri Tikhonov    {
1950aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i)));
2050aadb33SDmitri Tikhonov        s = lsquic_set32_add(&set, i);
2150aadb33SDmitri Tikhonov        assert(0 == s);
2250aadb33SDmitri Tikhonov    }
2350aadb33SDmitri Tikhonov
2450aadb33SDmitri Tikhonov    assert(("Value is not yet in the set", !lsquic_set32_has(&set, 0)));
2550aadb33SDmitri Tikhonov    s = lsquic_set32_add(&set, 0);
2650aadb33SDmitri Tikhonov    assert(0 == s);
2750aadb33SDmitri Tikhonov    assert(("Value is not yet in the set", !lsquic_set32_has(&set, 1)));
2850aadb33SDmitri Tikhonov    s = lsquic_set32_add(&set, 1);
2950aadb33SDmitri Tikhonov    assert(0 == s);
3050aadb33SDmitri Tikhonov
3150aadb33SDmitri Tikhonov    for (i = 0; i < 100; ++i)
3250aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
3350aadb33SDmitri Tikhonov
3450aadb33SDmitri Tikhonov    for (i = 300; i > 200; --i)
3550aadb33SDmitri Tikhonov    {
3650aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i)));
3750aadb33SDmitri Tikhonov        s = lsquic_set32_add(&set, i);
3850aadb33SDmitri Tikhonov        assert(0 == s);
3950aadb33SDmitri Tikhonov    }
4050aadb33SDmitri Tikhonov
4150aadb33SDmitri Tikhonov    for (i = 300; i > 200; --i)
4250aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
4350aadb33SDmitri Tikhonov
4450aadb33SDmitri Tikhonov    for (i = 100; i <= 200; ++i)
4550aadb33SDmitri Tikhonov        assert(("Value is not in the set", !lsquic_set32_has(&set, i)));
4650aadb33SDmitri Tikhonov
4750aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
4850aadb33SDmitri Tikhonov    {
4950aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i)));
5050aadb33SDmitri Tikhonov        lsquic_set32_add(&set, i);
5150aadb33SDmitri Tikhonov    }
5250aadb33SDmitri Tikhonov
5350aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
5450aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
5550aadb33SDmitri Tikhonov
5650aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
5750aadb33SDmitri Tikhonov    {
5850aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i + 1)));
5950aadb33SDmitri Tikhonov        lsquic_set32_add(&set, i + 1);
6050aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i + 3)));
6150aadb33SDmitri Tikhonov        lsquic_set32_add(&set, i + 3);
6250aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set32_has(&set, i + 2)));
6350aadb33SDmitri Tikhonov        lsquic_set32_add(&set, i + 2);
6450aadb33SDmitri Tikhonov    }
6550aadb33SDmitri Tikhonov
6650aadb33SDmitri Tikhonov    for (i = 0; i < 100; ++i)
6750aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
6850aadb33SDmitri Tikhonov    for (i = 100; i <= 200; ++i)
6950aadb33SDmitri Tikhonov        assert(("Value is not in the set", !lsquic_set32_has(&set, i)));
7050aadb33SDmitri Tikhonov    for (i = 201; i <= 300; ++i)
7150aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
7250aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; ++i)
7350aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set32_has(&set, i)));
7450aadb33SDmitri Tikhonov
7550aadb33SDmitri Tikhonov    lsquic_set32_cleanup(&set);
7650aadb33SDmitri Tikhonov}
7750aadb33SDmitri Tikhonov
7850aadb33SDmitri Tikhonov
7950aadb33SDmitri Tikhonovstatic void
8050aadb33SDmitri Tikhonovtest_lsquic_set64 (void)
8150aadb33SDmitri Tikhonov{
8250aadb33SDmitri Tikhonov    lsquic_set64_t set;
8350aadb33SDmitri Tikhonov    int i;
8450aadb33SDmitri Tikhonov
8550aadb33SDmitri Tikhonov    lsquic_set64_init(&set);
8650aadb33SDmitri Tikhonov
8750aadb33SDmitri Tikhonov    for (i = 2; i < 100; ++i)
8850aadb33SDmitri Tikhonov    {
8950aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i)));
9050aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i);
9150aadb33SDmitri Tikhonov    }
9250aadb33SDmitri Tikhonov
9350aadb33SDmitri Tikhonov    assert(("Value is not yet in the set", !lsquic_set64_has(&set, 0)));
9450aadb33SDmitri Tikhonov    lsquic_set64_add(&set, 0);
9550aadb33SDmitri Tikhonov    assert(("Value is not yet in the set", !lsquic_set64_has(&set, 1)));
9650aadb33SDmitri Tikhonov    lsquic_set64_add(&set, 1);
9750aadb33SDmitri Tikhonov
9850aadb33SDmitri Tikhonov    for (i = 0; i < 100; ++i)
9950aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
10050aadb33SDmitri Tikhonov
10150aadb33SDmitri Tikhonov    for (i = 300; i > 200; --i)
10250aadb33SDmitri Tikhonov    {
10350aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i)));
10450aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i);
10550aadb33SDmitri Tikhonov    }
10650aadb33SDmitri Tikhonov
10750aadb33SDmitri Tikhonov    for (i = 300; i > 200; --i)
10850aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
10950aadb33SDmitri Tikhonov
11050aadb33SDmitri Tikhonov    for (i = 100; i <= 200; ++i)
11150aadb33SDmitri Tikhonov        assert(("Value is not in the set", !lsquic_set64_has(&set, i)));
11250aadb33SDmitri Tikhonov
11350aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
11450aadb33SDmitri Tikhonov    {
11550aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i)));
11650aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i);
11750aadb33SDmitri Tikhonov    }
11850aadb33SDmitri Tikhonov
11950aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
12050aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
12150aadb33SDmitri Tikhonov
12250aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; i += 4)
12350aadb33SDmitri Tikhonov    {
12450aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i + 1)));
12550aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i + 1);
12650aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i + 3)));
12750aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i + 3);
12850aadb33SDmitri Tikhonov        assert(("Value is not yet in the set", !lsquic_set64_has(&set, i + 2)));
12950aadb33SDmitri Tikhonov        lsquic_set64_add(&set, i + 2);
13050aadb33SDmitri Tikhonov    }
13150aadb33SDmitri Tikhonov
13250aadb33SDmitri Tikhonov    for (i = 0; i < 100; ++i)
13350aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
13450aadb33SDmitri Tikhonov    for (i = 100; i <= 200; ++i)
13550aadb33SDmitri Tikhonov        assert(("Value is not in the set", !lsquic_set64_has(&set, i)));
13650aadb33SDmitri Tikhonov    for (i = 201; i <= 300; ++i)
13750aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
13850aadb33SDmitri Tikhonov    for (i = 1000; i < 2000; ++i)
13950aadb33SDmitri Tikhonov        assert(("Value is in the set", lsquic_set64_has(&set, i)));
14050aadb33SDmitri Tikhonov
14150aadb33SDmitri Tikhonov    lsquic_set64_cleanup(&set);
14250aadb33SDmitri Tikhonov}
14350aadb33SDmitri Tikhonov
14450aadb33SDmitri Tikhonov
14550aadb33SDmitri Tikhonovint
14650aadb33SDmitri Tikhonovmain (void)
14750aadb33SDmitri Tikhonov{
14850aadb33SDmitri Tikhonov    test_lsquic_set32();
14950aadb33SDmitri Tikhonov    test_lsquic_set64();
15050aadb33SDmitri Tikhonov    return 0;
15150aadb33SDmitri Tikhonov}
152