mirror of
https://github.com/mirror/make.git
synced 2025-01-24 11:20:28 +08:00
116767901f
Modify make functions that parse integer values to use long long values instead of long: on Windows long is the same as int (4 bytes) and we don't want behavior to differ between different platforms. * bootstrap.conf: Change strtol module to strtoll module. * src/function.c (parse_numeric): Use strtoll() and return long long. (func_word): Use long long. (func_wordlist): Use long long. Verify second argument is >= 0. (func_intcmp): Use long long. * src/config.ami.template: Don't define HAVE_STRTOLL. * src/config-vms.template: Define HAVE_STRTOLL. * src/config.W32.template: Define HAVE_STRTOLL. * tests/run_make_tests.pl: Set $ERR_out_of_range to the proper string. * tests/scripts/functions/word: Rework to use the new style and avoid TAB characters. Verify trailing whitespace is ignored. Add a test for a negative second argument to wordlist. Add tests for max signed integer values. Use $ERR_out_of_range for the error string. * tests/scripts/functions/intcmp: Add tests for min and max signed integer values. Use $ERR_out_of_range for the error string.
61 lines
1.9 KiB
Perl
61 lines
1.9 KiB
Perl
# -*-perl-*-
|
|
$description = "Test the intcmp function.\n";
|
|
|
|
$details = "Try various uses of intcmp and ensure they all give the correct
|
|
results.\n";
|
|
|
|
run_make_test('# Negative
|
|
n = -10
|
|
# Zero
|
|
z = 0
|
|
# Positive
|
|
p = 1000000000
|
|
min = -9223372036854775808
|
|
max = 9223372036854775807
|
|
.RECIPEPREFIX = >
|
|
all:
|
|
> @echo 0_1 $(intcmp $n,$n)
|
|
> @echo 0_2 $(intcmp $n,$z)
|
|
> @echo 0_3 $(intcmp $z,$n)
|
|
> @echo 1_1 $(intcmp $n,$n,$(shell echo lt))
|
|
> @echo 1_2 $(intcmp $n,$z,$(shell echo lt))
|
|
> @echo 1_3 $(intcmp $z,$n,$(shell echo lt))
|
|
> @echo 2_1 $(intcmp $n,$p,lt,ge)
|
|
> @echo 2_2 $(intcmp $z,$z,lt,ge)
|
|
> @echo 2_3 $(intcmp $p,$n,lt,ge)
|
|
> @echo 3_0 $(intcmp $p,$n,lt,eq,)
|
|
> @echo 3_1 $(intcmp $z,$p,lt,eq,gt)
|
|
> @echo 3_2 $(intcmp $p,$z,lt,eq,gt)
|
|
> @echo 3_3 $(intcmp $p,$p,lt,eq,gt)
|
|
> @echo 4_0 $(intcmp $(min),$(max),lt,eq,gt)
|
|
> @echo 4_1 $(intcmp $(max),$(min),lt,eq,gt)
|
|
> @echo 4_2 $(intcmp $(min),$(min),lt,eq,gt)
|
|
> @echo 4_3 $(intcmp $(max),$(max),lt,eq,gt)
|
|
', '', "0_1 -10\n0_2\n0_3\n1_1\n1_2 lt\n1_3\n2_1 lt\n2_2 ge\n2_3 ge\n3_0\n3_1 lt\n3_2 gt\n3_3 eq\n4_0 lt\n4_1 gt\n4_2 eq\n4_3 eq\n");
|
|
|
|
# Test error conditions
|
|
|
|
run_make_test('
|
|
intcmp-e1: ; @echo $(intcmp 12a,1,foo)
|
|
intcmp-e2: ; @echo $(intcmp 0,,foo)
|
|
intcmp-e3: ; @echo $(intcmp -1,9999999999999999999,foo)
|
|
intcmp-e4: ; @echo $(intcmp -1)
|
|
intcmp-e5: ; @echo $(intcmp ,55)',
|
|
'intcmp-e1',
|
|
"#MAKEFILE#:2: *** non-numeric first argument to 'intcmp' function: '12a'. Stop.",
|
|
512);
|
|
|
|
run_make_test(undef,
|
|
'intcmp-e2',
|
|
"#MAKEFILE#:3: *** non-numeric second argument to 'intcmp' function: ''. Stop.",
|
|
512);
|
|
|
|
run_make_test(undef,
|
|
'intcmp-e3',
|
|
"#MAKEFILE#:4: *** $ERR_out_of_range: '9999999999999999999'. Stop.",
|
|
512);
|
|
|
|
|
|
# This tells the test driver that the perl test script executed properly.
|
|
1;
|