Commit 9a082140 authored by David Gibson's avatar David Gibson

order: total_order_cmp() helper and better tests

Add a wrapper macro total_order_cmp() to more conveniently use the
total_order structures.  Add some tests for it, which also improve tests
the "fancy_cmp" function.
Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 28681e0a
......@@ -31,6 +31,9 @@ struct _total_order {
_ctx ctx; \
} _name
#define total_order_cmp(_order, _a, _b) \
((_order).cb((_a), (_b), (_order).ctx))
#define _DECL_ONAME(_oname, _itype) \
extern int _order_##_oname(const void *, const void *, void *); \
extern int order_##_oname(const _itype *, const _itype *, void *); \
......
......@@ -8,7 +8,7 @@ struct cmp_info {
struct item {
unsigned value;
char *str;
const char *str;
};
static inline int fancy_cmp(const struct item *a, const struct item *b,
......
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ccan/order/order.h>
#include <ccan/tap/tap.h>
#include "fancy_cmp.h"
int main(int argc, char *argv[])
{
struct item item1 = {
.value = 0,
.str = "aaa",
};
struct item item2 = {
.value = 0,
.str = "abb",
};
struct item item3 = {
.value = 0x1000,
.str = "baa",
};
struct cmp_info ctx1 = {
.xcode = 0,
.offset = 0,
};
struct cmp_info ctx2 = {
.xcode = 0x1000,
.offset = 1,
};
total_order(order1, struct item, struct cmp_info *) = {
fancy_cmp, &ctx1,
};
total_order(order2, struct item, struct cmp_info *) = {
fancy_cmp, &ctx2,
};
plan_tests(18);
ok1(total_order_cmp(order1, &item1, &item1) == 0);
ok1(total_order_cmp(order1, &item2, &item2) == 0);
ok1(total_order_cmp(order1, &item3, &item3) == 0);
ok1(total_order_cmp(order1, &item1, &item2) == -1);
ok1(total_order_cmp(order1, &item2, &item3) == -1);
ok1(total_order_cmp(order1, &item1, &item3) == -1);
ok1(total_order_cmp(order1, &item2, &item1) == 1);
ok1(total_order_cmp(order1, &item3, &item2) == 1);
ok1(total_order_cmp(order1, &item3, &item1) == 1);
ok1(total_order_cmp(order2, &item1, &item1) == 0);
ok1(total_order_cmp(order2, &item2, &item2) == 0);
ok1(total_order_cmp(order2, &item3, &item3) == 0);
ok1(total_order_cmp(order2, &item1, &item2) == 1);
ok1(total_order_cmp(order2, &item2, &item3) == 1);
ok1(total_order_cmp(order2, &item1, &item3) == 1);
ok1(total_order_cmp(order2, &item2, &item1) == -1);
ok1(total_order_cmp(order2, &item3, &item2) == -1);
ok1(total_order_cmp(order2, &item3, &item1) == -1);
exit(0);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment