Allow more signed integer types in test function arguments

Now that the C code supports the full range of intmax_t, allow any size of
signed integer type in the .data file parser.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/tests/scripts/generate_test_code.py b/tests/scripts/generate_test_code.py
index a3f6937..f900fd2 100755
--- a/tests/scripts/generate_test_code.py
+++ b/tests/scripts/generate_test_code.py
@@ -171,8 +171,23 @@
 import argparse
 
 
-# Types regognized as integer arguments in test functions.
-INTEGER_TYPES = frozenset(['int'])
+# Types regognized as signed integer arguments in test functions.
+SIGNED_INTEGER_TYPES = frozenset([
+    'char',
+    'short',
+    'short int',
+    'int',
+    'int8_t',
+    'int16_t',
+    'int32_t',
+    'int64_t',
+    'intmax_t',
+    'long',
+    'long int',
+    'long long int',
+    'mbedtls_mpi_sint',
+    'psa_status_t',
+])
 # Types recognized as string arguments in test functions.
 STRING_TYPES = frozenset(['char*', 'const char*', 'char const*'])
 # Types recognized as hex data arguments in test functions.
@@ -471,7 +486,7 @@
         # E.g. "int x[42]"
         return None
     typ, _ = m.groups()
-    if typ in INTEGER_TYPES:
+    if typ in SIGNED_INTEGER_TYPES:
         args.append('int')
         args_dispatch.append('((mbedtls_test_argument_t*)params[%d])->sint' % arg_idx)
         return 1
diff --git a/tests/scripts/test_generate_test_code.py b/tests/scripts/test_generate_test_code.py
index 7c0ac0c..effa46b 100755
--- a/tests/scripts/test_generate_test_code.py
+++ b/tests/scripts/test_generate_test_code.py
@@ -507,10 +507,10 @@
 
     def test_unsupported_arg(self):
         """
-        Test unsupported arguments (not among int, char * and data_t)
+        Test unsupported argument type
         :return:
         """
-        line = 'void entropy_threshold( char * a, data_t * h, char result )'
+        line = 'void entropy_threshold( char * a, data_t * h, unknown_t result )'
         self.assertRaises(ValueError, parse_function_arguments, line)
 
     def test_empty_params(self):
diff --git a/tests/suites/test_suite_platform_printf.data b/tests/suites/test_suite_platform_printf.data
index 1ed68d5..e6d3352 100644
--- a/tests/suites/test_suite_platform_printf.data
+++ b/tests/suites/test_suite_platform_printf.data
@@ -56,6 +56,10 @@
 printf "%d", -0x80000000
 printf_int:"%d":-0x80000000:"-2147483648"
 
+# Test that LONG_MAX is coming out untruncated through the test framework.
+printf "%lx", LONG_MAX
+printf_long_max:"%lx":LONG_MAX
+
 # The next few test cases exercise how the test framework handles special
 # characters in strings.
 printf "%c", SPACE, SPACE
diff --git a/tests/suites/test_suite_platform_printf.function b/tests/suites/test_suite_platform_printf.function
index f050d6e..7c5e1e2 100644
--- a/tests/suites/test_suite_platform_printf.function
+++ b/tests/suites/test_suite_platform_printf.function
@@ -32,6 +32,31 @@
 /* END_CASE */
 
 /* BEGIN_CASE */
+void printf_long_max(const char *format, long value)
+{
+    char *expected = NULL;
+    char *output = NULL;
+    /* "0x" plus 2 hex digits per byte */
+    const size_t n = sizeof(value) * 2;
+
+    /* We assume that long has no padding bits! */
+    ASSERT_ALLOC(expected, n + 1);
+    expected[0] = '7';
+    memset(expected + 1, 'f', sizeof(value) * 2 - 1);
+
+    ASSERT_ALLOC(output, n + 1);
+    TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, value));
+    ASSERT_COMPARE(expected, n + 1, output, n + 1);
+    mbedtls_free(output);
+    output = NULL;
+
+exit:
+    mbedtls_free(output);
+    mbedtls_free(expected);
+}
+/* END_CASE */
+
+/* BEGIN_CASE */
 void printf_char2(char *format, int arg1, int arg2, char *result)
 {
     char *output = NULL;