]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/formatting/formatting-tests.factor
formatting: fix strftime %U and %W
[factor.git] / basis / formatting / formatting-tests.factor
old mode 100755 (executable)
new mode 100644 (file)
index b3e503f..8b4bf16
@@ -1,7 +1,7 @@
 ! Copyright (C) 2008 John Benediktsson
 ! See http://factorcode.org/license.txt for BSD license
-USING: calendar formatting kernel math math.functions sequences
-strings system tools.test ;
+USING: calendar formatting kernel literals math math.functions
+sequences strings system tools.test ;
 IN: formatting.tests
 
 [ "%s" printf ] must-infer
@@ -33,10 +33,10 @@ IN: formatting.tests
 { "-0.500" } [ -1/2 "%.3f" sprintf ] unit-test
 { "0.010" } [ 1/100 "%.3f" sprintf ] unit-test
 { "100000000000000000000000.000000" } [ 23 10^ "%f" sprintf ] unit-test
-{ "1.2" } [ 125/100 "%.1f" sprintf ] unit-test
 { "1.4" } [ 135/100 "%.1f" sprintf ] unit-test
-{ "2.0" } [ 5/2 "%.0f" sprintf ] unit-test
-{ "4.0" } [ 7/2 "%.0f" sprintf ] unit-test
+{ "4" } [ 7/2 "%.0f" sprintf ] unit-test
+{ "1" } [ 1.0 "%.0f" sprintf ] unit-test
+{ "0.0e+00" } [ 0 "%.1e" sprintf ] unit-test
 { "  1.23" } [ 1.23456789 "%6.2f" sprintf ] unit-test
 { "001100" } [ 12 "%06b" sprintf ] unit-test
 { "==14" } [ 12 "%'=4o" sprintf ] unit-test
@@ -84,19 +84,35 @@ IN: formatting.tests
 { "-9007199254740991.0" } [ 53 2^ 1 - neg "%.1f" sprintf ] unit-test
 { "-9007199254740992.0" } [ 53 2^ neg "%.1f" sprintf ] unit-test
 { "-9007199254740993.0" } [ 53 2^ 1 + neg "%.1f" sprintf ] unit-test
-
-{ "1.5625" } [ 1.5625 "%d" sprintf ] unit-test
-{ "1.9p0" } [ 1.5625 "%x" sprintf ] unit-test
-{ "1.9P0" } [ 1.5625 "%X" sprintf ] unit-test
-{ "1.44p0" } [ 1.5625 "%o" sprintf ] unit-test
-{ "1.44P0" } [ 1.5625 "%O" sprintf ] unit-test
-{ "1.1001p0" } [ 1.5625 "%b" sprintf ] unit-test
-{ "1.1001P0" } [ 1.5625 "%B" sprintf ] unit-test
-{ "14+17/20" } [ 14+17/20 "%d" sprintf ] unit-test
-{ "e+11/14" } [ 14+17/20 "%x" sprintf ] unit-test
-{ "E+11/14" } [ 14+17/20 "%X" sprintf ] unit-test
-{ "16+21/24" } [ 14+17/20 "%o" sprintf ] unit-test
-{ "1110+10001/10100" } [ 14+17/20 "%b" sprintf ] unit-test
+{ "987654321098765432" } [ 987654321098765432 "%d" sprintf ] unit-test
+{ "987654321098765432.0" } [ 987654321098765432 "%.1f" sprintf ] unit-test
+{ "987654321098765432" } [ 987654321098765432 "%.0f" sprintf ] unit-test
+{ "9.8765432109876543200e+417" } [ 987654321098765432 10 400 ^ * "%.19e" sprintf ] unit-test
+{ "9.876543210987654320e+417" } [ 987654321098765432 10 400 ^ * "%.18e" sprintf ] unit-test
+{ "9.87654321098765432e+417" } [ 987654321098765432 10 400 ^ * "%.17e" sprintf ] unit-test
+{ "9.8765432109876543e+417" } [ 987654321098765432 10 400 ^ * "%.16e" sprintf ] unit-test
+{ "9.876543210987654e+417" } [ 987654321098765432 10 400 ^ * "%.15e" sprintf ] unit-test
+{ "9.87654321098765e+417" } [ 987654321098765432 10 400 ^ * "%.14e" sprintf ] unit-test
+{ "9.8765432109877e+417" } [ 987654321098765432 10 400 ^ * "%.13e" sprintf ] unit-test
+{ "9.876543210988e+417" } [ 987654321098765432 10 400 ^ * "%.12e" sprintf ] unit-test
+{ "9.87654321099e+417" } [ 987654321098765432 10 400 ^ * "%.11e" sprintf ] unit-test
+{ "9.8765432110e+417" } [ 987654321098765432 10 400 ^ * "%.10e" sprintf ] unit-test
+{ "9.876543211e+417" } [ 987654321098765432 10 400 ^ * "%.9e" sprintf ] unit-test
+{ "9.87654321e+417" } [ 987654321098765432 10 400 ^ * "%.8e" sprintf ] unit-test
+{ "9.8765432e+417" } [ 987654321098765432 10 400 ^ * "%.7e" sprintf ] unit-test
+{ "9.876543e+417" } [ 987654321098765432 10 400 ^ * "%.6e" sprintf ] unit-test
+{ "9.87654e+417" } [ 987654321098765432 10 400 ^ * "%.5e" sprintf ] unit-test
+{ "9.8765e+417" } [ 987654321098765432 10 400 ^ * "%.4e" sprintf ] unit-test
+{ "9.877e+417" } [ 987654321098765432 10 400 ^ * "%.3e" sprintf ] unit-test
+{ "9.88e+417" } [ 987654321098765432 10 400 ^ * "%.2e" sprintf ] unit-test
+{ "9.9e+417" } [ 987654321098765432 10 400 ^ * "%.1e" sprintf ] unit-test
+! This works even on windows (even though %.0e is special on
+! windows) because it doesn't use the fast formatter from the
+! system
+{ "1e+418" } [ 987654321098765432 10 400 ^ * "%.0e" sprintf ] unit-test
+{ "9e+417" } [ 937654321098765432 10 400 ^ * "%.0e" sprintf ] unit-test
+{ "1.0e+418" } [ 997654321098765432 10 400 ^ * "%.1e" sprintf ] unit-test
+{ "1.00e+418" } [ 999654321098765432 10 400 ^ * "%.2e" sprintf ] unit-test
 
 { "ff" } [ 0xff "%x" sprintf ] unit-test
 { "FF" } [ 0xff "%X" sprintf ] unit-test
@@ -127,6 +143,7 @@ IN: formatting.tests
 { "[####monkey]" } [ "monkey" "[%'#10s]" sprintf ] unit-test
 { "[many monke]" } [ "many monkeys" "[%10.10s]" sprintf ] unit-test
 
+{ "{ 1, 2, 3 }" } [ BV{ 1 2 3 } "%[%d, %]" sprintf ] unit-test
 { "{ 1, 2, 3 }" } [ { 1 2 3 } "%[%s, %]" sprintf ] unit-test
 { "{ 1:2, 3:4 }" } [ H{ { 1 2 } { 3 4 } } "%[%s: %s %]" sprintf ] unit-test
 
@@ -147,3 +164,33 @@ IN: formatting.tests
 { t } [ "October" testtime "%B" strftime = ] unit-test
 { t } [ "Thu Oct 09 12:03:15 2008" testtime "%c" strftime = ] unit-test
 { t } [ "PM" testtime "%p" strftime = ] unit-test
+
+! Differences on Windows due to rounding mode (#1792).
+${ os windows? "1.3" "1.2" ? } [ 125/100 "%.1f" sprintf ] unit-test
+${ os windows? "3" "2" ? } [ 5/2 "%.0f" sprintf ] unit-test
+! Differences on Windows due to setprecision(0)
+${ os windows? "2.500000e+00" "2e+00" ? } [ 5/2 "%.0e" sprintf ] unit-test
+${ os windows? "3.500000e+00" "4e+00" ? } [ 7/2 "%.0e" sprintf ] unit-test
+${ os windows? "1.000000e+00" "1e+00" ? } [ 1.0 "%.0e" sprintf ] unit-test
+
+{ "00" } [ 2020 1 1 <date> "%U" strftime ] unit-test
+{ "00" } [ 2020 1 1 <date> "%W" strftime ] unit-test
+
+{ "44" } [ 2020 11 6 <date> "%U" strftime ] unit-test
+{ "44" } [ 2020 11 6 <date> "%W" strftime ] unit-test
+
+{ "00" } [ 2022 1 1 <date> "%U" strftime ] unit-test
+{ "01" } [ 2022 1 2 <date> "%U" strftime ] unit-test
+{ "01" } [ 2022 1 3 <date> "%U" strftime ] unit-test
+
+{ "00" } [ 2022 1 1 <date> "%W" strftime ] unit-test
+{ "00" } [ 2022 1 2 <date> "%W" strftime ] unit-test
+{ "01" } [ 2022 1 3 <date> "%W" strftime ] unit-test
+
+{ "34" } [ 2022 8 27 <date> "%U" strftime ] unit-test
+{ "35" } [ 2022 8 28 <date> "%U" strftime ] unit-test
+{ "35" } [ 2022 8 29 <date> "%U" strftime ] unit-test
+
+{ "34" } [ 2022 8 27 <date> "%W" strftime ] unit-test
+{ "34" } [ 2022 8 28 <date> "%W" strftime ] unit-test
+{ "35" } [ 2022 8 29 <date> "%W" strftime ] unit-test