1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!./perl -w
BEGIN {
chdir 't' if -d 't';
require './test.pl';
set_up_inc('../lib');
}
plan tests => 48;
# Some of these will cause warnings if left on. Here we're checking the
# functionality, not the warnings.
no warnings "numeric";
# test cases based on [perl #36675] -'-10' eq '+10'
is(- 10, -10, "Simple numeric negation to negative");
is(- -10, 10, "Simple numeric negation to positive");
is(-"10", -10, "Negation of a positive string to negative");
is(-"10.0", -10, "Negation of a positive decimal sting to negative");
is(-"10foo", -10, "Negation of a numeric-lead string returns negation of numeric");
is(-"-10", 10, 'Negation of string starting with "-" returns a positive number - integer');
"-10" =~ /(.*)/;
is(-$1, 10, 'Negation of magical string starting with "-" - integer');
is(-"-10.0", 10.0, 'Negation of string starting with "-" returns a positive number - decimal');
"-10.0" =~ /(.*)/;
is(-$1, 10.0, 'Negation of magical string starting with "-" - decimal');
is(-"-10foo", "+10foo", 'Negation of string starting with "-" returns a string starting with "+" - non-numeric');
is(-"xyz", "-xyz", 'Negation of a negative string adds "-" to the front');
is(-"-xyz", "+xyz", "Negation of a negative string to positive");
is(-"+xyz", "-xyz", "Negation of a positive string to negative");
is(-bareword, "-bareword", "Negation of bareword treated like a string");
is(- -bareword, "+bareword", "Negation of -bareword returns string +bareword");
is(-" -10", 10, "Negation of a whitespace-lead numeric string");
is(-" -10.0", 10, "Negation of a whitespace-lead decimal string");
is(-" -10foo", 10,
"Negation of a whitespace-lead sting starting with a numeric");
is(-"-e1", "+e1", "Negation of e1");
$x = "dogs";
()=0+$x;
is -$x, '-dogs', 'cached numeric value does not sabotage string negation';
is(-"97656250000000000", -97656250000000000, '-bigint vs -"bigint"');
"9765625000000000" =~ /(\d+)/;
is -$1, -"$1", '-$1 vs -"$1" with big int';
$a = "%apples";
chop($au = "%apples\x{100}");
is(-$au, -$a, 'utf8 flag makes no difference for string negation');
is -"\x{100}", 0, '-(non-ASCII) is equivalent to -(punct)';
sub TIESCALAR { bless[] }
sub STORE { $_[0][0] = $_[1] }
sub FETCH { $_[0][0] }
tie $t, "";
$a = "97656250000000000";
() = 0+$a;
$t = $a;
is -$t, -97656250000000000, 'magic str+int dualvar';
{ # Repeat most of the tests under use integer
use integer;
is(- 10, -10, "Simple numeric negation to negative");
is(- -10, 10, "Simple numeric negation to positive");
is(-"10", -10, "Negation of a positive string to negative");
is(-"10.0", -10, "Negation of a positive decimal sting to negative");
is(-"10foo", -10,
"Negation of a numeric-lead string returns negation of numeric");
is(-"-10", 10,
'Negation of string starting with "-" returns a positive number -'
.' integer');
"-10" =~ /(.*)/;
is(-$1, 10, 'Negation of magical string starting with "-" - integer');
is(-"-10.0", 10,
'Negation of string starting with "-" returns a positive number - '
.'decimal');
"-10.0" =~ /(.*)/;
is(-$1, 10, 'Negation of magical string starting with "-" - decimal');
is(-"-10foo", "+10foo",
'Negation of string starting with "-" returns a string starting '
.'with "+" - non-numeric');
is(-"xyz", "-xyz",
'Negation of a negative string adds "-" to the front');
is(-"-xyz", "+xyz", "Negation of a negative string to positive");
is(-"+xyz", "-xyz", "Negation of a positive string to negative");
is(-bareword, "-bareword",
"Negation of bareword treated like a string");
is(- -bareword, "+bareword",
"Negation of -bareword returns string +bareword");
is(-" -10", 10, "Negation of a whitespace-lead numeric string");
is(-" -10.0", 10, "Negation of a whitespace-lead decimal string");
is(-" -10foo", 10,
"Negation of a whitespace-lead sting starting with a numeric");
is(-"-e1", "+e1", "Negation of e1 (use integer)");
$x = "dogs";
()=0+$x;
is -$x, '-dogs',
'cached numeric value does not sabotage string negation';
$a = "%apples";
chop($au = "%apples\x{100}");
is(-$au, -$a, 'utf8 flag makes no difference for string negation');
is -"\x{100}", 0, '-(non-ASCII) is equivalent to -(punct)';
}
# [perl #120288] use integer should not stop barewords from being quoted
{
use strict;
use integer;
is eval "return -a"||$@, "-a", '-bareword under strict+integer';
}
|