$have_setlocale++;
};
+# Visual C's CRT goes silly on strings of the form "en_US.ISO8859-1"
+# and mingw32 uses said silly CRT
+$have_setlocale = 0 if $^O eq 'MSWin32' && $Config{cc} =~ /^(cl|gcc)/i;
+
+# 103 (the last test) may fail but that is okay.
+# (It indicates something broken in the environment, not Perl)
+# Therefore .. only until 102, not 103.
print "1..", ($have_setlocale ? 102 : 98), "\n";
use vars qw($a
# even the default locale will taint under 'use locale'.
sub is_tainted { # hello, camel two.
+ local $^W; # no warnings 'undef'
my $dummy;
not eval { $dummy = join("", @_), kill 0; 1 }
}
# Select the largest of the alpha(num)bets.
($Locale, @Locale) = ($English, @English)
- if (length(@English) > length(@Locale));
+ if (@English > @Locale);
($Locale, @Locale) = ($German, @German)
- if (length(@German) > length(@Locale));
+ if (@German > @Locale);
($Locale, @Locale) = ($French, @French)
- if (length(@French) > length(@Locale));
+ if (@French > @Locale);
($Locale, @Locale) = ($Spanish, @Spanish)
- if (length(@Spanish) > length(@Locale));
-
-print "# Locale = $Locale\n";
-print "# Alnum_ = @Locale\n";
+ if (@Spanish > @Locale);
{
local $^W = 0;
setlocale(&LC_ALL, $Locale);
}
+# Sort it now that LC_ALL has been set.
+
+@Locale = sort @Locale;
+
+print "# Locale = $Locale\n";
+print "# Alnum_ = @Locale\n";
+
{
my $i = 0;
}
print "ok 101\n";
-# The @Locale should be internally consistent.
+# Test for read-onlys.
print "# testing 102\n";
{
- my ($from, $to, $lesser, $greater, @test, %test, $test);
+ no locale;
+ $a = "qwerty";
+ {
+ use locale;
+ print "not " if $a cmp "qwerty";
+ }
+}
+print "ok 102\n";
+
+# This test must be the last one because its failure is not fatal.
+# The @Locale should be internally consistent.
+# Thanks to Hallvard Furuseth <h.b.furuseth@usit.uio.no>
+# for inventing a way to test for ordering consistency
+# without requiring any particular order.
+# <jhi@iki.fi>
+
+print "# testing 103\n";
+{
+ my ($from, $to, $lesser, $greater, @test, %test, $test, $yes, $no, $sign);
for (0..9) {
# Select a slice.
$from++; $to++;
$to = $#Locale if ($to > $#Locale);
$greater = join('', @Locale[$from..$to]);
+ ($yes, $no, $sign) = ($lesser lt $greater
+ ? (" ", "not ", 1)
+ : ("not ", " ", -1));
+ # all these tests should FAIL (return 0).
@test =
(
- 'not ($lesser lt $greater)', # 0
- 'not ($lesser le $greater)', # 1
- 'not ($lesser ne $greater)', # 2
- ' ($lesser eq $greater)', # 3
- ' ($lesser ge $greater)', # 4
- ' ($lesser gt $greater)', # 5
- ' ($greater lt $lesser )', # 6
- ' ($greater le $lesser )', # 7
- 'not ($greater ne $lesser )', # 8
- ' ($greater eq $lesser )', # 9
- 'not ($greater ge $lesser )', # 10
- 'not ($greater gt $lesser )', # 11
- # Well, these two are sort of redundant
- # because @Locale was derived using cmp.
- 'not (($lesser cmp $greater) == -1)', # 12
- 'not (($greater cmp $lesser ) == 1)' # 13
+ $no.' ($lesser lt $greater)', # 0
+ $no.' ($lesser le $greater)', # 1
+ 'not ($lesser ne $greater)', # 2
+ ' ($lesser eq $greater)', # 3
+ $yes.' ($lesser ge $greater)', # 4
+ $yes.' ($lesser gt $greater)', # 5
+ $yes.' ($greater lt $lesser )', # 6
+ $yes.' ($greater le $lesser )', # 7
+ 'not ($greater ne $lesser )', # 8
+ ' ($greater eq $lesser )', # 9
+ $no.' ($greater ge $lesser )', # 10
+ $no.' ($greater gt $lesser )', # 11
+ 'not (($lesser cmp $greater) == -$sign)' # 12
);
@test{@test} = 0 x @test;
$test = 0;
for my $ti (@test) { $test{$ti} = eval $ti ; $test ||= $test{$ti} }
if ($test) {
- print "# failed 102 at:\n";
+ print "# failed 103 at:\n";
print "# lesser = '$lesser'\n";
print "# greater = '$greater'\n";
+ print "# lesser cmp greater = ", $lesser cmp $greater, "\n";
+ print "# greater cmp lesser = ", $greater cmp $lesser, "\n";
print "# (greater) from = $from, to = $to\n";
for my $ti (@test) {
printf("# %-40s %-4s", $ti,
print "\n";
}
- print 'not ';
+ warn "The locale definition on your system may have errors.\n";
last;
}
}
}
-print "ok 102\n";
+
+# eof