[Qemu-devel] [PATCH v2 02/12] check-qdict: Add test for qdict_join()
Add some test cases for qdict_join(). Signed-off-by: Max Reitz --- tests/check-qdict.c | 87 + 1 file changed, 87 insertions(+) diff --git a/tests/check-qdict.c b/tests/check-qdict.c index 2ad0f78..a9296f0 100644 --- a/tests/check-qdict.c +++ b/tests/check-qdict.c @@ -444,6 +444,92 @@ static void qdict_array_split_test(void) QDECREF(test_dict); } +static void qdict_join_test(void) +{ +QDict *dict1, *dict2; +bool overwrite = false; +int i; + +dict1 = qdict_new(); +dict2 = qdict_new(); + + +/* Test everything once without overwrite and once with */ +do +{ +/* Test empty dicts */ +qdict_join(dict1, dict2, overwrite); + +g_assert(qdict_size(dict1) == 0); +g_assert(qdict_size(dict2) == 0); + + +/* First iteration: Test movement */ +/* Second iteration: Test empty source and non-empty destination */ +qdict_put(dict2, "foo", qint_from_int(42)); + +for (i = 0; i < 2; i++) { +qdict_join(dict1, dict2, overwrite); + +g_assert(qdict_size(dict1) == 1); +g_assert(qdict_size(dict2) == 0); + +g_assert(qdict_get_int(dict1, "foo") == 42); +} + + +/* Test non-empty source and destination without conflict */ +qdict_put(dict2, "bar", qint_from_int(23)); + +qdict_join(dict1, dict2, overwrite); + +g_assert(qdict_size(dict1) == 2); +g_assert(qdict_size(dict2) == 0); + +g_assert(qdict_get_int(dict1, "foo") == 42); +g_assert(qdict_get_int(dict1, "bar") == 23); + + +/* Test conflict */ +qdict_put(dict2, "foo", qint_from_int(84)); + +qdict_join(dict1, dict2, overwrite); + +g_assert(qdict_size(dict1) == 2); +g_assert(qdict_size(dict2) == !overwrite); + +g_assert(qdict_get_int(dict1, "foo") == overwrite ? 84 : 42); +g_assert(qdict_get_int(dict1, "bar") == 23); + +if (!overwrite) { +g_assert(qdict_get_int(dict2, "foo") == 84); +} + + +/* Check the references */ +g_assert(qdict_get(dict1, "foo")->refcnt == 1); +g_assert(qdict_get(dict1, "bar")->refcnt == 1); + +if (!overwrite) { +g_assert(qdict_get(dict2, "foo")->refcnt == 1); +} + + +/* Clean up */ +qdict_del(dict1, "foo"); +qdict_del(dict1, "bar"); + +if (!overwrite) { +qdict_del(dict2, "foo"); +} +} +while (overwrite ^= true); + + +QDECREF(dict1); +QDECREF(dict2); +} + /* * Errors test-cases */ @@ -584,6 +670,7 @@ int main(int argc, char **argv) g_test_add_func("/public/iterapi", qdict_iterapi_test); g_test_add_func("/public/flatten", qdict_flatten_test); g_test_add_func("/public/array_split", qdict_array_split_test); +g_test_add_func("/public/join", qdict_join_test); g_test_add_func("/errors/put_exists", qdict_put_exists_test); g_test_add_func("/errors/get_not_exists", qdict_get_not_exists_test); -- 1.9.0
Re: [Qemu-devel] [PATCH v2 02/12] check-qdict: Add test for qdict_join()
On 03/07/2014 03:55 PM, Max Reitz wrote: > Add some test cases for qdict_join(). > > Signed-off-by: Max Reitz > --- > tests/check-qdict.c | 87 > + > 1 file changed, 87 insertions(+) Reviewed-by: Eric Blake > +/* Test everything once without overwrite and once with */ > +do > +{ > +} > +while (overwrite ^= true); That has got to be the coolest do-while I've seen in a long time :) -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: [Qemu-devel] [PATCH v2 02/12] check-qdict: Add test for qdict_join()
The Friday 07 Mar 2014 à 23:55:46 (+0100), Max Reitz wrote : > Add some test cases for qdict_join(). > > Signed-off-by: Max Reitz > --- > tests/check-qdict.c | 87 > + > 1 file changed, 87 insertions(+) > > diff --git a/tests/check-qdict.c b/tests/check-qdict.c > index 2ad0f78..a9296f0 100644 > --- a/tests/check-qdict.c > +++ b/tests/check-qdict.c > @@ -444,6 +444,92 @@ static void qdict_array_split_test(void) > QDECREF(test_dict); > } > > +static void qdict_join_test(void) > +{ > +QDict *dict1, *dict2; > +bool overwrite = false; > +int i; > + > +dict1 = qdict_new(); > +dict2 = qdict_new(); > + > + > +/* Test everything once without overwrite and once with */ > +do > +{ > +/* Test empty dicts */ > +qdict_join(dict1, dict2, overwrite); > + > +g_assert(qdict_size(dict1) == 0); > +g_assert(qdict_size(dict2) == 0); > + > + > +/* First iteration: Test movement */ > +/* Second iteration: Test empty source and non-empty destination */ > +qdict_put(dict2, "foo", qint_from_int(42)); > + > +for (i = 0; i < 2; i++) { > +qdict_join(dict1, dict2, overwrite); > + > +g_assert(qdict_size(dict1) == 1); > +g_assert(qdict_size(dict2) == 0); > + > +g_assert(qdict_get_int(dict1, "foo") == 42); > +} > + > + > +/* Test non-empty source and destination without conflict */ > +qdict_put(dict2, "bar", qint_from_int(23)); > + > +qdict_join(dict1, dict2, overwrite); > + > +g_assert(qdict_size(dict1) == 2); > +g_assert(qdict_size(dict2) == 0); > + > +g_assert(qdict_get_int(dict1, "foo") == 42); > +g_assert(qdict_get_int(dict1, "bar") == 23); > + > + > +/* Test conflict */ > +qdict_put(dict2, "foo", qint_from_int(84)); > + > +qdict_join(dict1, dict2, overwrite); > + > +g_assert(qdict_size(dict1) == 2); > +g_assert(qdict_size(dict2) == !overwrite); > + > +g_assert(qdict_get_int(dict1, "foo") == overwrite ? 84 : 42); > +g_assert(qdict_get_int(dict1, "bar") == 23); > + > +if (!overwrite) { > +g_assert(qdict_get_int(dict2, "foo") == 84); > +} > + > + > +/* Check the references */ > +g_assert(qdict_get(dict1, "foo")->refcnt == 1); > +g_assert(qdict_get(dict1, "bar")->refcnt == 1); > + > +if (!overwrite) { > +g_assert(qdict_get(dict2, "foo")->refcnt == 1); > +} > + > + > +/* Clean up */ > +qdict_del(dict1, "foo"); > +qdict_del(dict1, "bar"); > + > +if (!overwrite) { > +qdict_del(dict2, "foo"); > +} > +} > +while (overwrite ^= true); > + > + > +QDECREF(dict1); > +QDECREF(dict2); > +} > + > /* > * Errors test-cases > */ > @@ -584,6 +670,7 @@ int main(int argc, char **argv) > g_test_add_func("/public/iterapi", qdict_iterapi_test); > g_test_add_func("/public/flatten", qdict_flatten_test); > g_test_add_func("/public/array_split", qdict_array_split_test); > +g_test_add_func("/public/join", qdict_join_test); > > g_test_add_func("/errors/put_exists", qdict_put_exists_test); > g_test_add_func("/errors/get_not_exists", qdict_get_not_exists_test); > -- > 1.9.0 > Reviewed-by: Benoit Canet