From patchwork Thu May 23 18:20:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 246010 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 4ECB52C02A8 for ; Fri, 24 May 2013 04:24:35 +1000 (EST) Received: from localhost ([::1]:36042 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfaBl-0002Eq-EW for incoming@patchwork.ozlabs.org; Thu, 23 May 2013 14:24:33 -0400 Received: from eggs.gnu.org ([208.118.235.92]:49712) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ufa8A-0005Fp-5d for qemu-devel@nongnu.org; Thu, 23 May 2013 14:20:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ufa81-0003UQ-HO for qemu-devel@nongnu.org; Thu, 23 May 2013 14:20:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:10228) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ufa81-0003U6-70 for qemu-devel@nongnu.org; Thu, 23 May 2013 14:20:41 -0400 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4NIKe90019193 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 23 May 2013 14:20:40 -0400 Received: from localhost (ovpn-113-86.phx2.redhat.com [10.3.113.86]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r4NIKe8l028468; Thu, 23 May 2013 14:20:40 -0400 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Thu, 23 May 2013 14:20:27 -0400 Message-Id: <1369333232-24145-8-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1369333232-24145-1-git-send-email-lcapitulino@redhat.com> References: <1369333232-24145-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: aliguori@us.ibm.com Subject: [Qemu-devel] [PULL 07/12] qapi: fix visitor serialization tests for numbers/doubles X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Michael Roth We never actually stored the stringified double values into the strings before we did the comparisons. This left number/double values completely uncovered in test-visitor-serialization tests. Fixing this exposed a bug in our handling of large whole number values in QEMU's JSON parser which is now fixed. Simplify the code while we're at it by dropping the calc_float_string_storage() craziness in favor of GStrings. Signed-off-by: Michael Roth Reviewed-by: Laszlo Ersek Reviewed-by: Amos Kong Signed-off-by: Luiz Capitulino --- tests/test-visitor-serialization.c | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c index 8c8adac..fed6810 100644 --- a/tests/test-visitor-serialization.c +++ b/tests/test-visitor-serialization.c @@ -229,17 +229,6 @@ typedef struct TestArgs { void *test_data; } TestArgs; -#define FLOAT_STRING_PRECISION 6 /* corresponding to n in %.nf formatting */ -static gsize calc_float_string_storage(double value) -{ - int whole_value = value; - gsize i = 0; - do { - i++; - } while (whole_value /= 10); - return i + 2 + FLOAT_STRING_PRECISION; -} - static void test_primitives(gconstpointer opaque) { TestArgs *args = (TestArgs *) opaque; @@ -248,7 +237,6 @@ static void test_primitives(gconstpointer opaque) PrimitiveType *pt_copy = g_malloc0(sizeof(*pt_copy)); Error *err = NULL; void *serialize_data; - char *double1, *double2; pt_copy->type = pt->type; ops->serialize(pt, &serialize_data, visit_primitive_type, &err); @@ -260,14 +248,17 @@ static void test_primitives(gconstpointer opaque) g_assert_cmpstr(pt->value.string, ==, pt_copy->value.string); g_free((char *)pt_copy->value.string); } else if (pt->type == PTYPE_NUMBER) { + GString *double_expected = g_string_new(""); + GString *double_actual = g_string_new(""); /* we serialize with %f for our reference visitors, so rather than fuzzy * floating math to test "equality", just compare the formatted values */ - double1 = g_malloc0(calc_float_string_storage(pt->value.number)); - double2 = g_malloc0(calc_float_string_storage(pt_copy->value.number)); - g_assert_cmpstr(double1, ==, double2); - g_free(double1); - g_free(double2); + g_string_printf(double_expected, "%.6f", pt->value.number); + g_string_printf(double_actual, "%.6f", pt_copy->value.number); + g_assert_cmpstr(double_actual->str, ==, double_expected->str); + + g_string_free(double_expected, true); + g_string_free(double_actual, true); } else if (pt->type == PTYPE_BOOLEAN) { g_assert_cmpint(!!pt->value.max, ==, !!pt->value.max); } else {