#                                                                    -*-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 = 888
q = 889
huge = 8857889956778499040639527525992734031025567913257255490371761260681427
.RECIPEPREFIX = >
all:
> @echo 0_1 $(intcmp $n,$n)
> @echo 0_2 $(intcmp $z,$z)
> @echo 0_3 $(intcmp -$z,$z)
> @echo 0_4 $(intcmp $p,$p)
> @echo 0_5 $(intcmp $n,$z)
> @echo 0_6 $(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 3_4 $(intcmp $p,$q,lt,eq,gt)
> @echo 3_5 $(intcmp $q,$p,lt,eq,gt)
> @echo 3_6 $(intcmp -$p,-$q,lt,eq,gt)
> @echo 3_7 $(intcmp -$q,-$p,lt,eq,gt)
> @echo 4_1 $(intcmp -$(huge),$(huge),lt,eq,gt)
> @echo 4_2 $(intcmp $(huge),-$(huge),lt,eq,gt)
> @echo 4_3 $(intcmp -$(huge),-$(huge),lt,eq,gt)
> @echo 4_4 $(intcmp +$(huge),$(huge),lt,eq,gt)
', '', '0_1 -10
0_2 0
0_3 0
0_4 888
0_5
0_6
1_1
1_2 lt
1_3
2_1 lt
2_2 ge
2_3 ge
3_0
3_1 lt
3_2 gt
3_3 eq
3_4 lt
3_5 gt
3_6 gt
3_7 lt
4_1 lt
4_2 gt
4_3 eq
4_4 eq
');

# Test error conditions

run_make_test('
intcmp-e1: ; @echo $(intcmp 12a,1,foo)
intcmp-e2: ; @echo $(intcmp 0,,foo)
intcmp-e3: ; @echo $(intcmp -1,)
intcmp-e4: ; @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: empty value.  Stop.",
              512);

run_make_test(undef,
              'intcmp-e3',
              "#MAKEFILE#:4: *** non-numeric second argument to 'intcmp' function: empty value.  Stop.",
              512);

run_make_test(undef,
              'intcmp-e4',
              "#MAKEFILE#:5: *** non-numeric first argument to 'intcmp' function: empty value.  Stop.",
              512);


# This tells the test driver that the perl test script executed properly.
1;
