174fe6c29SRuslan Bukin /*
2*85f87cf4SRuslan Bukin * Copyright (c) 2016-2019, Intel Corporation
374fe6c29SRuslan Bukin *
474fe6c29SRuslan Bukin * Redistribution and use in source and binary forms, with or without
574fe6c29SRuslan Bukin * modification, are permitted provided that the following conditions are met:
674fe6c29SRuslan Bukin *
774fe6c29SRuslan Bukin * * Redistributions of source code must retain the above copyright notice,
874fe6c29SRuslan Bukin * this list of conditions and the following disclaimer.
974fe6c29SRuslan Bukin * * Redistributions in binary form must reproduce the above copyright notice,
1074fe6c29SRuslan Bukin * this list of conditions and the following disclaimer in the documentation
1174fe6c29SRuslan Bukin * and/or other materials provided with the distribution.
1274fe6c29SRuslan Bukin * * Neither the name of Intel Corporation nor the names of its contributors
1374fe6c29SRuslan Bukin * may be used to endorse or promote products derived from this software
1474fe6c29SRuslan Bukin * without specific prior written permission.
1574fe6c29SRuslan Bukin *
1674fe6c29SRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1774fe6c29SRuslan Bukin * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1874fe6c29SRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1974fe6c29SRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2074fe6c29SRuslan Bukin * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2174fe6c29SRuslan Bukin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2274fe6c29SRuslan Bukin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2374fe6c29SRuslan Bukin * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2474fe6c29SRuslan Bukin * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2574fe6c29SRuslan Bukin * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2674fe6c29SRuslan Bukin * POSSIBILITY OF SUCH DAMAGE.
2774fe6c29SRuslan Bukin */
2874fe6c29SRuslan Bukin
2974fe6c29SRuslan Bukin #include "ptunit_threads.h"
3074fe6c29SRuslan Bukin
3174fe6c29SRuslan Bukin #include "pt_block_cache.h"
3274fe6c29SRuslan Bukin
3374fe6c29SRuslan Bukin #include <string.h>
3474fe6c29SRuslan Bukin
3574fe6c29SRuslan Bukin
3674fe6c29SRuslan Bukin /* A test fixture optionally providing a block cache and automatically freeing
3774fe6c29SRuslan Bukin * the cache.
3874fe6c29SRuslan Bukin */
3974fe6c29SRuslan Bukin struct bcache_fixture {
4074fe6c29SRuslan Bukin /* Threading support. */
4174fe6c29SRuslan Bukin struct ptunit_thrd_fixture thrd;
4274fe6c29SRuslan Bukin
4374fe6c29SRuslan Bukin /* The cache - it will be freed automatically. */
4474fe6c29SRuslan Bukin struct pt_block_cache *bcache;
4574fe6c29SRuslan Bukin
4674fe6c29SRuslan Bukin /* The test fixture initialization and finalization functions. */
4774fe6c29SRuslan Bukin struct ptunit_result (*init)(struct bcache_fixture *);
4874fe6c29SRuslan Bukin struct ptunit_result (*fini)(struct bcache_fixture *);
4974fe6c29SRuslan Bukin };
5074fe6c29SRuslan Bukin
5174fe6c29SRuslan Bukin enum {
5274fe6c29SRuslan Bukin /* The number of entries in fixture-provided caches. */
5374fe6c29SRuslan Bukin bfix_nentries = 0x10000,
5474fe6c29SRuslan Bukin
5574fe6c29SRuslan Bukin #if defined(FEATURE_THREADS)
5674fe6c29SRuslan Bukin
5774fe6c29SRuslan Bukin /* The number of additional threads to use for stress testing. */
5874fe6c29SRuslan Bukin bfix_threads = 3,
5974fe6c29SRuslan Bukin
6074fe6c29SRuslan Bukin #endif /* defined(FEATURE_THREADS) */
6174fe6c29SRuslan Bukin
6274fe6c29SRuslan Bukin /* The number of iterations in stress testing. */
6374fe6c29SRuslan Bukin bfix_iterations = 0x10
6474fe6c29SRuslan Bukin };
6574fe6c29SRuslan Bukin
cfix_init(struct bcache_fixture * bfix)6674fe6c29SRuslan Bukin static struct ptunit_result cfix_init(struct bcache_fixture *bfix)
6774fe6c29SRuslan Bukin {
6874fe6c29SRuslan Bukin ptu_test(ptunit_thrd_init, &bfix->thrd);
6974fe6c29SRuslan Bukin
7074fe6c29SRuslan Bukin bfix->bcache = NULL;
7174fe6c29SRuslan Bukin
7274fe6c29SRuslan Bukin return ptu_passed();
7374fe6c29SRuslan Bukin }
7474fe6c29SRuslan Bukin
bfix_init(struct bcache_fixture * bfix)7574fe6c29SRuslan Bukin static struct ptunit_result bfix_init(struct bcache_fixture *bfix)
7674fe6c29SRuslan Bukin {
7774fe6c29SRuslan Bukin ptu_test(cfix_init, bfix);
7874fe6c29SRuslan Bukin
7974fe6c29SRuslan Bukin bfix->bcache = pt_bcache_alloc(bfix_nentries);
8074fe6c29SRuslan Bukin ptu_ptr(bfix->bcache);
8174fe6c29SRuslan Bukin
8274fe6c29SRuslan Bukin return ptu_passed();
8374fe6c29SRuslan Bukin }
8474fe6c29SRuslan Bukin
bfix_fini(struct bcache_fixture * bfix)8574fe6c29SRuslan Bukin static struct ptunit_result bfix_fini(struct bcache_fixture *bfix)
8674fe6c29SRuslan Bukin {
8774fe6c29SRuslan Bukin int thrd;
8874fe6c29SRuslan Bukin
8974fe6c29SRuslan Bukin ptu_test(ptunit_thrd_fini, &bfix->thrd);
9074fe6c29SRuslan Bukin
9174fe6c29SRuslan Bukin for (thrd = 0; thrd < bfix->thrd.nthreads; ++thrd)
9274fe6c29SRuslan Bukin ptu_int_eq(bfix->thrd.result[thrd], 0);
9374fe6c29SRuslan Bukin
9474fe6c29SRuslan Bukin pt_bcache_free(bfix->bcache);
9574fe6c29SRuslan Bukin
9674fe6c29SRuslan Bukin return ptu_passed();
9774fe6c29SRuslan Bukin }
9874fe6c29SRuslan Bukin
bcache_entry_size(void)9974fe6c29SRuslan Bukin static struct ptunit_result bcache_entry_size(void)
10074fe6c29SRuslan Bukin {
10174fe6c29SRuslan Bukin ptu_uint_eq(sizeof(struct pt_bcache_entry), sizeof(uint32_t));
10274fe6c29SRuslan Bukin
10374fe6c29SRuslan Bukin return ptu_passed();
10474fe6c29SRuslan Bukin }
10574fe6c29SRuslan Bukin
bcache_size(void)10674fe6c29SRuslan Bukin static struct ptunit_result bcache_size(void)
10774fe6c29SRuslan Bukin {
10874fe6c29SRuslan Bukin ptu_uint_le(sizeof(struct pt_block_cache),
10974fe6c29SRuslan Bukin 2 * sizeof(struct pt_bcache_entry));
11074fe6c29SRuslan Bukin
11174fe6c29SRuslan Bukin return ptu_passed();
11274fe6c29SRuslan Bukin }
11374fe6c29SRuslan Bukin
free_null(void)11474fe6c29SRuslan Bukin static struct ptunit_result free_null(void)
11574fe6c29SRuslan Bukin {
11674fe6c29SRuslan Bukin pt_bcache_free(NULL);
11774fe6c29SRuslan Bukin
11874fe6c29SRuslan Bukin return ptu_passed();
11974fe6c29SRuslan Bukin }
12074fe6c29SRuslan Bukin
add_null(void)12174fe6c29SRuslan Bukin static struct ptunit_result add_null(void)
12274fe6c29SRuslan Bukin {
12374fe6c29SRuslan Bukin struct pt_bcache_entry bce;
12474fe6c29SRuslan Bukin int errcode;
12574fe6c29SRuslan Bukin
12674fe6c29SRuslan Bukin memset(&bce, 0, sizeof(bce));
12774fe6c29SRuslan Bukin
12874fe6c29SRuslan Bukin errcode = pt_bcache_add(NULL, 0ull, bce);
12974fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal);
13074fe6c29SRuslan Bukin
13174fe6c29SRuslan Bukin return ptu_passed();
13274fe6c29SRuslan Bukin }
13374fe6c29SRuslan Bukin
lookup_null(void)13474fe6c29SRuslan Bukin static struct ptunit_result lookup_null(void)
13574fe6c29SRuslan Bukin {
13674fe6c29SRuslan Bukin struct pt_bcache_entry bce;
13774fe6c29SRuslan Bukin struct pt_block_cache bcache;
13874fe6c29SRuslan Bukin int errcode;
13974fe6c29SRuslan Bukin
14074fe6c29SRuslan Bukin errcode = pt_bcache_lookup(&bce, NULL, 0ull);
14174fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal);
14274fe6c29SRuslan Bukin
14374fe6c29SRuslan Bukin errcode = pt_bcache_lookup(NULL, &bcache, 0ull);
14474fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal);
14574fe6c29SRuslan Bukin
14674fe6c29SRuslan Bukin return ptu_passed();
14774fe6c29SRuslan Bukin }
14874fe6c29SRuslan Bukin
alloc(struct bcache_fixture * bfix)14974fe6c29SRuslan Bukin static struct ptunit_result alloc(struct bcache_fixture *bfix)
15074fe6c29SRuslan Bukin {
15174fe6c29SRuslan Bukin bfix->bcache = pt_bcache_alloc(0x10000ull);
15274fe6c29SRuslan Bukin ptu_ptr(bfix->bcache);
15374fe6c29SRuslan Bukin
15474fe6c29SRuslan Bukin return ptu_passed();
15574fe6c29SRuslan Bukin }
15674fe6c29SRuslan Bukin
alloc_min(struct bcache_fixture * bfix)15774fe6c29SRuslan Bukin static struct ptunit_result alloc_min(struct bcache_fixture *bfix)
15874fe6c29SRuslan Bukin {
15974fe6c29SRuslan Bukin bfix->bcache = pt_bcache_alloc(1ull);
16074fe6c29SRuslan Bukin ptu_ptr(bfix->bcache);
16174fe6c29SRuslan Bukin
16274fe6c29SRuslan Bukin return ptu_passed();
16374fe6c29SRuslan Bukin }
16474fe6c29SRuslan Bukin
alloc_too_big(struct bcache_fixture * bfix)16574fe6c29SRuslan Bukin static struct ptunit_result alloc_too_big(struct bcache_fixture *bfix)
16674fe6c29SRuslan Bukin {
16774fe6c29SRuslan Bukin bfix->bcache = pt_bcache_alloc(UINT32_MAX + 1ull);
16874fe6c29SRuslan Bukin ptu_null(bfix->bcache);
16974fe6c29SRuslan Bukin
17074fe6c29SRuslan Bukin return ptu_passed();
17174fe6c29SRuslan Bukin }
17274fe6c29SRuslan Bukin
alloc_zero(struct bcache_fixture * bfix)17374fe6c29SRuslan Bukin static struct ptunit_result alloc_zero(struct bcache_fixture *bfix)
17474fe6c29SRuslan Bukin {
17574fe6c29SRuslan Bukin bfix->bcache = pt_bcache_alloc(0ull);
17674fe6c29SRuslan Bukin ptu_null(bfix->bcache);
17774fe6c29SRuslan Bukin
17874fe6c29SRuslan Bukin return ptu_passed();
17974fe6c29SRuslan Bukin }
18074fe6c29SRuslan Bukin
initially_empty(struct bcache_fixture * bfix)18174fe6c29SRuslan Bukin static struct ptunit_result initially_empty(struct bcache_fixture *bfix)
18274fe6c29SRuslan Bukin {
18374fe6c29SRuslan Bukin uint64_t index;
18474fe6c29SRuslan Bukin
18574fe6c29SRuslan Bukin for (index = 0; index < bfix_nentries; ++index) {
18674fe6c29SRuslan Bukin struct pt_bcache_entry bce;
18774fe6c29SRuslan Bukin int status;
18874fe6c29SRuslan Bukin
18974fe6c29SRuslan Bukin memset(&bce, 0xff, sizeof(bce));
19074fe6c29SRuslan Bukin
19174fe6c29SRuslan Bukin status = pt_bcache_lookup(&bce, bfix->bcache, index);
19274fe6c29SRuslan Bukin ptu_int_eq(status, 0);
19374fe6c29SRuslan Bukin
19474fe6c29SRuslan Bukin status = pt_bce_is_valid(bce);
19574fe6c29SRuslan Bukin ptu_int_eq(status, 0);
19674fe6c29SRuslan Bukin }
19774fe6c29SRuslan Bukin
19874fe6c29SRuslan Bukin return ptu_passed();
19974fe6c29SRuslan Bukin }
20074fe6c29SRuslan Bukin
add_bad_index(struct bcache_fixture * bfix)20174fe6c29SRuslan Bukin static struct ptunit_result add_bad_index(struct bcache_fixture *bfix)
20274fe6c29SRuslan Bukin {
20374fe6c29SRuslan Bukin struct pt_bcache_entry bce;
20474fe6c29SRuslan Bukin int errcode;
20574fe6c29SRuslan Bukin
20674fe6c29SRuslan Bukin memset(&bce, 0, sizeof(bce));
20774fe6c29SRuslan Bukin
20874fe6c29SRuslan Bukin errcode = pt_bcache_add(bfix->bcache, bfix_nentries, bce);
20974fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal);
21074fe6c29SRuslan Bukin
21174fe6c29SRuslan Bukin return ptu_passed();
21274fe6c29SRuslan Bukin }
21374fe6c29SRuslan Bukin
lookup_bad_index(struct bcache_fixture * bfix)21474fe6c29SRuslan Bukin static struct ptunit_result lookup_bad_index(struct bcache_fixture *bfix)
21574fe6c29SRuslan Bukin {
21674fe6c29SRuslan Bukin struct pt_bcache_entry bce;
21774fe6c29SRuslan Bukin int errcode;
21874fe6c29SRuslan Bukin
21974fe6c29SRuslan Bukin errcode = pt_bcache_lookup(&bce, bfix->bcache, bfix_nentries);
22074fe6c29SRuslan Bukin ptu_int_eq(errcode, -pte_internal);
22174fe6c29SRuslan Bukin
22274fe6c29SRuslan Bukin return ptu_passed();
22374fe6c29SRuslan Bukin }
22474fe6c29SRuslan Bukin
add(struct bcache_fixture * bfix,uint64_t index)22574fe6c29SRuslan Bukin static struct ptunit_result add(struct bcache_fixture *bfix, uint64_t index)
22674fe6c29SRuslan Bukin {
22774fe6c29SRuslan Bukin struct pt_bcache_entry bce, exp;
22874fe6c29SRuslan Bukin int errcode;
22974fe6c29SRuslan Bukin
23074fe6c29SRuslan Bukin memset(&bce, 0xff, sizeof(bce));
23174fe6c29SRuslan Bukin memset(&exp, 0x00, sizeof(exp));
23274fe6c29SRuslan Bukin
23374fe6c29SRuslan Bukin exp.ninsn = 1;
23474fe6c29SRuslan Bukin exp.displacement = 7;
23574fe6c29SRuslan Bukin exp.mode = ptem_64bit;
23674fe6c29SRuslan Bukin exp.qualifier = ptbq_decode;
23774fe6c29SRuslan Bukin exp.isize = 7;
23874fe6c29SRuslan Bukin
23974fe6c29SRuslan Bukin errcode = pt_bcache_add(bfix->bcache, index, exp);
24074fe6c29SRuslan Bukin ptu_int_eq(errcode, 0);
24174fe6c29SRuslan Bukin
24274fe6c29SRuslan Bukin errcode = pt_bcache_lookup(&bce, bfix->bcache, index);
24374fe6c29SRuslan Bukin ptu_int_eq(errcode, 0);
24474fe6c29SRuslan Bukin
24574fe6c29SRuslan Bukin ptu_uint_eq(bce.ninsn, exp.ninsn);
24674fe6c29SRuslan Bukin ptu_int_eq(bce.displacement, exp.displacement);
24774fe6c29SRuslan Bukin ptu_uint_eq(pt_bce_exec_mode(bce), pt_bce_exec_mode(exp));
24874fe6c29SRuslan Bukin ptu_uint_eq(pt_bce_qualifier(bce), pt_bce_qualifier(exp));
24974fe6c29SRuslan Bukin ptu_uint_eq(bce.isize, exp.isize);
25074fe6c29SRuslan Bukin
25174fe6c29SRuslan Bukin return ptu_passed();
25274fe6c29SRuslan Bukin }
25374fe6c29SRuslan Bukin
worker(void * arg)25474fe6c29SRuslan Bukin static int worker(void *arg)
25574fe6c29SRuslan Bukin {
25674fe6c29SRuslan Bukin struct pt_bcache_entry exp;
25774fe6c29SRuslan Bukin struct pt_block_cache *bcache;
25874fe6c29SRuslan Bukin uint64_t iter, index;
25974fe6c29SRuslan Bukin
26074fe6c29SRuslan Bukin bcache = arg;
26174fe6c29SRuslan Bukin if (!bcache)
26274fe6c29SRuslan Bukin return -pte_internal;
26374fe6c29SRuslan Bukin
26474fe6c29SRuslan Bukin memset(&exp, 0x00, sizeof(exp));
26574fe6c29SRuslan Bukin exp.ninsn = 5;
26674fe6c29SRuslan Bukin exp.displacement = 28;
26774fe6c29SRuslan Bukin exp.mode = ptem_64bit;
26874fe6c29SRuslan Bukin exp.qualifier = ptbq_again;
26974fe6c29SRuslan Bukin exp.isize = 3;
27074fe6c29SRuslan Bukin
27174fe6c29SRuslan Bukin for (index = 0; index < bfix_nentries; ++index) {
27274fe6c29SRuslan Bukin for (iter = 0; iter < bfix_iterations; ++iter) {
27374fe6c29SRuslan Bukin struct pt_bcache_entry bce;
27474fe6c29SRuslan Bukin int errcode;
27574fe6c29SRuslan Bukin
27674fe6c29SRuslan Bukin memset(&bce, 0xff, sizeof(bce));
27774fe6c29SRuslan Bukin
27874fe6c29SRuslan Bukin errcode = pt_bcache_lookup(&bce, bcache, index);
27974fe6c29SRuslan Bukin if (errcode < 0)
28074fe6c29SRuslan Bukin return errcode;
28174fe6c29SRuslan Bukin
28274fe6c29SRuslan Bukin if (!pt_bce_is_valid(bce)) {
28374fe6c29SRuslan Bukin errcode = pt_bcache_add(bcache, index, exp);
28474fe6c29SRuslan Bukin if (errcode < 0)
28574fe6c29SRuslan Bukin return errcode;
28674fe6c29SRuslan Bukin }
28774fe6c29SRuslan Bukin
28874fe6c29SRuslan Bukin errcode = pt_bcache_lookup(&bce, bcache, index);
28974fe6c29SRuslan Bukin if (errcode < 0)
29074fe6c29SRuslan Bukin return errcode;
29174fe6c29SRuslan Bukin
29274fe6c29SRuslan Bukin if (!pt_bce_is_valid(bce))
29374fe6c29SRuslan Bukin return -pte_nosync;
29474fe6c29SRuslan Bukin
29574fe6c29SRuslan Bukin if (bce.ninsn != exp.ninsn)
29674fe6c29SRuslan Bukin return -pte_nosync;
29774fe6c29SRuslan Bukin
29874fe6c29SRuslan Bukin if (bce.displacement != exp.displacement)
29974fe6c29SRuslan Bukin return -pte_nosync;
30074fe6c29SRuslan Bukin
30174fe6c29SRuslan Bukin if (pt_bce_exec_mode(bce) != pt_bce_exec_mode(exp))
30274fe6c29SRuslan Bukin return -pte_nosync;
30374fe6c29SRuslan Bukin
30474fe6c29SRuslan Bukin if (pt_bce_qualifier(bce) != pt_bce_qualifier(exp))
30574fe6c29SRuslan Bukin return -pte_nosync;
30674fe6c29SRuslan Bukin
30774fe6c29SRuslan Bukin if (bce.isize != exp.isize)
30874fe6c29SRuslan Bukin return -pte_nosync;
30974fe6c29SRuslan Bukin }
31074fe6c29SRuslan Bukin }
31174fe6c29SRuslan Bukin
31274fe6c29SRuslan Bukin return 0;
31374fe6c29SRuslan Bukin }
31474fe6c29SRuslan Bukin
stress(struct bcache_fixture * bfix)31574fe6c29SRuslan Bukin static struct ptunit_result stress(struct bcache_fixture *bfix)
31674fe6c29SRuslan Bukin {
31774fe6c29SRuslan Bukin int errcode;
31874fe6c29SRuslan Bukin
31974fe6c29SRuslan Bukin #if defined(FEATURE_THREADS)
32074fe6c29SRuslan Bukin {
32174fe6c29SRuslan Bukin int thrd;
32274fe6c29SRuslan Bukin
32374fe6c29SRuslan Bukin for (thrd = 0; thrd < bfix_threads; ++thrd)
32474fe6c29SRuslan Bukin ptu_test(ptunit_thrd_create, &bfix->thrd, worker,
32574fe6c29SRuslan Bukin bfix->bcache);
32674fe6c29SRuslan Bukin }
32774fe6c29SRuslan Bukin #endif /* defined(FEATURE_THREADS) */
32874fe6c29SRuslan Bukin
32974fe6c29SRuslan Bukin errcode = worker(bfix->bcache);
33074fe6c29SRuslan Bukin ptu_int_eq(errcode, 0);
33174fe6c29SRuslan Bukin
33274fe6c29SRuslan Bukin return ptu_passed();
33374fe6c29SRuslan Bukin }
33474fe6c29SRuslan Bukin
main(int argc,char ** argv)33574fe6c29SRuslan Bukin int main(int argc, char **argv)
33674fe6c29SRuslan Bukin {
33774fe6c29SRuslan Bukin struct bcache_fixture bfix, cfix;
33874fe6c29SRuslan Bukin struct ptunit_suite suite;
33974fe6c29SRuslan Bukin
34074fe6c29SRuslan Bukin bfix.init = bfix_init;
34174fe6c29SRuslan Bukin bfix.fini = bfix_fini;
34274fe6c29SRuslan Bukin
34374fe6c29SRuslan Bukin cfix.init = cfix_init;
34474fe6c29SRuslan Bukin cfix.fini = bfix_fini;
34574fe6c29SRuslan Bukin
34674fe6c29SRuslan Bukin suite = ptunit_mk_suite(argc, argv);
34774fe6c29SRuslan Bukin
34874fe6c29SRuslan Bukin ptu_run(suite, bcache_entry_size);
34974fe6c29SRuslan Bukin ptu_run(suite, bcache_size);
35074fe6c29SRuslan Bukin
35174fe6c29SRuslan Bukin ptu_run(suite, free_null);
35274fe6c29SRuslan Bukin ptu_run(suite, add_null);
35374fe6c29SRuslan Bukin ptu_run(suite, lookup_null);
35474fe6c29SRuslan Bukin
35574fe6c29SRuslan Bukin ptu_run_f(suite, alloc, cfix);
35674fe6c29SRuslan Bukin ptu_run_f(suite, alloc_min, cfix);
35774fe6c29SRuslan Bukin ptu_run_f(suite, alloc_too_big, cfix);
35874fe6c29SRuslan Bukin ptu_run_f(suite, alloc_zero, cfix);
35974fe6c29SRuslan Bukin
36074fe6c29SRuslan Bukin ptu_run_f(suite, initially_empty, bfix);
36174fe6c29SRuslan Bukin
36274fe6c29SRuslan Bukin ptu_run_f(suite, add_bad_index, bfix);
36374fe6c29SRuslan Bukin ptu_run_f(suite, lookup_bad_index, bfix);
36474fe6c29SRuslan Bukin
36574fe6c29SRuslan Bukin ptu_run_fp(suite, add, bfix, 0ull);
36674fe6c29SRuslan Bukin ptu_run_fp(suite, add, bfix, bfix_nentries - 1ull);
36774fe6c29SRuslan Bukin ptu_run_f(suite, stress, bfix);
36874fe6c29SRuslan Bukin
36974fe6c29SRuslan Bukin return ptunit_report(&suite);
37074fe6c29SRuslan Bukin }
371