[DTrace-devel] [PATCH] Simplification of the varint test

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Jun 11 22:32:49 PDT 2021


From: Eugene Loh <eugene.loh at oracle.com>

Intended to be squashed back into
"Implement variable length integer support".
---
 test/internals/tst.varint.c | 122 ++++++++++++------------------------
 1 file changed, 41 insertions(+), 81 deletions(-)

diff --git a/test/internals/tst.varint.c b/test/internals/tst.varint.c
index 7011b488..bec6947f 100644
--- a/test/internals/tst.varint.c
+++ b/test/internals/tst.varint.c
@@ -6,29 +6,26 @@
 #include <dt_varint.h>
 
 void
-check_length(uint64_t val, int len, int exp)
+check(uint64_t val, int exp)
 {
-	if (len != exp) {
-		printf("Length wrong for %lu: %d vs %d\n", val, len, exp);
+	char s[VARINT_MAX_BYTES];
+	int rc, len;
+	uint64_t dval;
+
+	rc = dt_int2vint(val, s);
+	if (rc != exp) {
+		printf("Length wrong for %lu: %d vs %d\n", val, rc, exp);
 		exit(1);
 	}
-}
-
-void
-check_size(uint64_t val, int len, int exp)
-{
+	len = dt_vint_size(val);
 	if (len != exp) {
 		printf("Size wrong for %lu: %d vs %d\n", val, len, exp);
 		exit(1);
 	}
-}
-
-void
-check_value(uint64_t dval, uint64_t eval, int len)
-{
-	if (dval != eval) {
+	dval = dt_vint2int(s);
+	if (dval != val) {
 		printf("Value decode error (%d byte prefix): %lx vs %lx\n",
-		       len, dval, eval);
+		       rc, dval, val);
 		exit(1);
 	}
 }
@@ -37,59 +34,37 @@ void
 check_range(uint64_t lo, uint64_t hi, int len)
 {
 	uint64_t	val;
-	char		s[VARINT_MAX_BYTES];
-	int		rc;
-
-	for (val = lo - 10000; val < lo + 10000; val++) {
-		rc = dt_int2vint(val, s);
-		if (val < lo) {
-			check_length(val, rc, len - 1);
-			check_size(val, dt_vint_size(val), len - 1);
-		} else {
-			check_length(val, rc, len);
-			check_size(val, dt_vint_size(val), len);
-		}
 
-		check_value(dt_vint2int(s), val, rc);
-	}
-
-	for (val = hi - 10000; val < hi + 10000; val++) {
-		rc = dt_int2vint(val, s);
-		if (val <= hi) {
-			check_length(val, rc, len);
-			check_size(val, dt_vint_size(val), len);
-		} else {
-			check_length(val, rc, len + 1);
-			check_size(val, dt_vint_size(val), len + 1);
-		}
-
-		check_value(dt_vint2int(s), val, rc);
-	}
+	/* taste test!  Here are two styles to choose from: */
+#if 0
+	for (val = lo - 10000; val < lo; val++)
+		check(val, len-1);
+	for (val = lo; val < lo + 10000; val++)
+		check(val, len);
+	for (val = hi - 10000; val <= hi; val++)
+		check(val, len);
+	for (val = hi + 1; val < hi + 10000; val++)
+		check(val, len + 1);
+#else
+	for (val = lo - 10000; val < lo + 10000; val++)
+		check(val, val < lo ? len-1 : len);
+	for (val = hi - 10000; val < hi + 10000; val++)
+		check(val, val <= hi ? len : len + 1);
+#endif
 }
 
 int
 main(void)
 {
 	uint64_t	val;
-	char		s[VARINT_MAX_BYTES];
-	int		rc;
 
 	/* First range: we go through all 16-bit values. */
-	for (val = 0; val < 0xffff; val++) {
-		rc = dt_int2vint(val, s);
-		if (val <= VARINT_1_MAX) {
-			check_length(val, rc, 1);
-			check_size(val, dt_vint_size(val), 1);
-		} else if (val <= VARINT_2_MAX) {
-			check_length(val, rc, 2);
-			check_size(val, dt_vint_size(val), 2);
-		} else {
-			check_length(val, rc, 3);
-			check_size(val, dt_vint_size(val), 3);
-		}
-
-		check_value(dt_vint2int(s), val, rc);
-	}
+	for (val = 0; val <= VARINT_1_MAX; val++)
+		check(val, 1);
+	for (val = VARINT_1_MAX + 1; val <= VARINT_2_MAX; val++)
+		check(val, 2);
+	for (val = VARINT_2_MAX + 1; val < 0xffff; val++)
+		check(val, 3);
 
 	/* For higher ranges, verify the low and high boundary ranges. */
 	check_range(VARINT_3_MIN, VARINT_3_MAX, 3);
@@ -100,31 +75,16 @@ main(void)
 	check_range(VARINT_8_MIN, VARINT_8_MAX, 8);
 
 	/* Verify the final range. */
-	for (val = VARINT_9_MIN - 10000; val < VARINT_9_MIN + 10000; val++) {
-		rc = dt_int2vint(val, s);
-		if (val < VARINT_9_MIN) {
-			check_length(val, rc, 8);
-			check_size(val, dt_vint_size(val), 8);
-		} else {
-			check_length(val, rc, 9);
-			check_size(val, dt_vint_size(val), 9);
-		}
-
-		check_value(dt_vint2int(s), val, rc);
-	}
-
+	for (val = VARINT_9_MIN - 10000; val < VARINT_9_MIN; val++)
+		check(val, 8);
+	for (val = VARINT_9_MIN; val < VARINT_9_MIN + 10000; val++)
+		check(val, 9);
 	for (val = VARINT_9_MAX - 10000; val < VARINT_9_MAX; val++) {
-		rc = dt_int2vint(val, s);
-		check_length(val, rc, 9);
-		check_size(val, dt_vint_size(val), 9);
-
-		check_value(dt_vint2int(s), val, rc);
+		check(val, 9);
 	}
+	check(VARINT_9_MAX, 9);
 
-	rc = dt_int2vint(VARINT_9_MAX, s);
-	check_length(VARINT_9_MAX, rc, 9);
-	check_size(VARINT_9_MAX, dt_vint_size(VARINT_9_MAX), 9);
-	check_value(dt_vint2int(s), VARINT_9_MAX, rc);
+	return 0;
 }
 
 #include "dt_varint.c"
-- 
2.18.4




More information about the DTrace-devel mailing list