summaryrefslogtreecommitdiff
path: root/tests/virbitmaptest.c
diff options
context:
space:
mode:
authorPeter Krempa <pkrempa@redhat.com>2016-01-07 15:45:39 +0100
committerPeter Krempa <pkrempa@redhat.com>2016-02-05 16:21:45 +0100
commit9479642fd3c5112fb6e107fa2304970d272206cb (patch)
treed6217b75ef7950fc52462b5096ac7af64ccb2155 /tests/virbitmaptest.c
parentc3bd0019c0e3f080dbf0d4bd08245ffb2daa2765 (diff)
downloadlibvirt-9479642fd3c5112fb6e107fa2304970d272206cb.tar.gz
util: bitmap: Introduce bitmap subtraction
Performs binary subtraction of two bitmaps. Stores result in the first operand.
Diffstat (limited to 'tests/virbitmaptest.c')
-rw-r--r--tests/virbitmaptest.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/virbitmaptest.c b/tests/virbitmaptest.c
index 8e458d2597..967a5c8291 100644
--- a/tests/virbitmaptest.c
+++ b/tests/virbitmaptest.c
@@ -552,9 +552,55 @@ test10(const void *opaque ATTRIBUTE_UNUSED)
return ret;
}
+struct testBinaryOpData {
+ const char *a;
+ const char *b;
+ const char *res;
+};
+
+static int
+test11(const void *opaque)
+{
+ const struct testBinaryOpData *data = opaque;
+ virBitmapPtr amap = NULL;
+ virBitmapPtr bmap = NULL;
+ virBitmapPtr resmap = NULL;
+ int ret = -1;
+
+ if (virBitmapParse(data->a, 0, &amap, 256) < 0 ||
+ virBitmapParse(data->b, 0, &bmap, 256) < 0 ||
+ virBitmapParse(data->res, 0, &resmap, 256) < 0)
+ goto cleanup;
+
+ virBitmapSubtract(amap, bmap);
+
+ if (!virBitmapEqual(amap, resmap)) {
+ fprintf(stderr, "\n bitmap subtraction failed: '%s'-'%s'!='%s'\n",
+ data->a, data->b, data->res);
+ goto cleanup;
+ }
+
+ ret = 0;
+
+ cleanup:
+ virBitmapFree(amap);
+ virBitmapFree(bmap);
+ virBitmapFree(resmap);
+
+ return ret;
+}
+
+#define TESTBINARYOP(A, B, RES, FUNC) \
+ testBinaryOpData.a = A; \
+ testBinaryOpData.b = B; \
+ testBinaryOpData.res = RES; \
+ if (virtTestRun(virtTestCounterNext(), FUNC, &testBinaryOpData) < 0) \
+ ret = -1;
+
static int
mymain(void)
{
+ struct testBinaryOpData testBinaryOpData;
int ret = 0;
if (virtTestRun("test1", test1, NULL) < 0)
@@ -578,6 +624,15 @@ mymain(void)
if (virtTestRun("test10", test10, NULL) < 0)
ret = -1;
+ virtTestCounterReset("test11-");
+ TESTBINARYOP("0", "0", "0,^0", test11);
+ TESTBINARYOP("0-3", "0", "1-3", test11);
+ TESTBINARYOP("0-3", "0,3", "1-2", test11);
+ TESTBINARYOP("0,^0", "0", "0,^0", test11);
+ TESTBINARYOP("0-3", "0-3", "0,^0", test11);
+ TESTBINARYOP("0-3", "0,^0", "0-3", test11);
+ TESTBINARYOP("0,2", "1,3", "0,2", test11);
+
return ret;
}