1 /*
2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /* Type-specific source code for unit test
25 *
26 * Regenerate the BasicX classes via genBasic.sh whenever this file changes.
27 * We check in the generated source files so that the test tree can be used
28 * independently of the rest of the source tree.
29 */
30
31 // -- This file was mechanically generated: Do not edit! -- //
32
33 import java.io.*;
34 import java.math.BigDecimal;
35 import java.math.BigInteger;
36 import java.text.DateFormatSymbols;
37 import java.util.*;
38
39 import static java.util.Calendar.*;
40
41
42
43
44
45 public class BasicDouble extends Basic {
46
47 private static void test(String fs, String exp, Object ... args) {
48 Formatter f = new Formatter(new StringBuilder(), Locale.US);
49 f.format(fs, args);
50 ck(fs, exp, f.toString());
51 }
52
53 private static void test(Locale l, String fs, String exp, Object ... args)
54 {
55 Formatter f = new Formatter(new StringBuilder(), l);
56 f.format(fs, args);
57 ck(fs, exp, f.toString());
58 }
59
60 private static void test(String fs, Object ... args) {
61 Formatter f = new Formatter(new StringBuilder(), Locale.US);
62 f.format(fs, args);
63 ck(fs, "fail", f.toString());
64 }
65
66 private static void test(String fs) {
67 Formatter f = new Formatter(new StringBuilder(), Locale.US);
68 f.format(fs, "fail");
69 ck(fs, "fail", f.toString());
70 }
71
72 private static void testSysOut(String fs, String exp, Object ... args) {
73 FileOutputStream fos = null;
74 FileInputStream fis = null;
75 try {
76 PrintStream saveOut = System.out;
77 fos = new FileOutputStream("testSysOut");
115 if (!caught)
116 fail(fs, ex);
117 else
118 pass();
119 }
120
121 private static void tryCatch(String fs, Class<?> ex, Object ... args) {
122 boolean caught = false;
123 try {
124 test(fs, args);
125 } catch (Throwable x) {
126 if (ex.isAssignableFrom(x.getClass()))
127 caught = true;
128 }
129 if (!caught)
130 fail(fs, ex);
131 else
132 pass();
133 }
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295 private static double create(double v) {
296 return (double) v;
297 }
298
299
300 private static double negate(double v) {
301 return -v;
302 }
303
304 private static double mult(double v, double mul) {
305 return v * mul;
306 }
307
308 private static double recip(double v) {
309 return 1.0 / v;
310 }
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330 public static void test() {
331 TimeZone.setDefault(TimeZone.getTimeZone("GMT-0800"));
332
333 // Any characters not explicitly defined as conversions, date/time
334 // conversion suffixes, or flags are illegal and are reserved for
335 // future extensions. Use of such a character in a format string will
336 // cause an UnknownFormatConversionException or
337 // UnknownFormatFlagsException to be thrown.
338 tryCatch("%q", UnknownFormatConversionException.class);
339 tryCatch("%t&", UnknownFormatConversionException.class);
340 tryCatch("%&d", UnknownFormatConversionException.class);
341 tryCatch("%^b", UnknownFormatConversionException.class);
342
343 //---------------------------------------------------------------------
344 // Formatter.java class javadoc examples
345 //---------------------------------------------------------------------
346 test(Locale.FRANCE, "e = %+10.4f", "e = +2,7183", Math.E);
347 test("%4$2s %3$2s %2$2s %1$2s", " d c b a", "a", "b", "c", "d");
348 test("Amount gained or lost since last statement: $ %,(.2f",
349 "Amount gained or lost since last statement: $ (6,217.58)",
495 test("%h", Integer.toHexString("Hello, Duke".hashCode()),
496 "Hello, Duke");
497 test("%10h", " ddf63471", "Hello, Duke");
498 test("%-10h", "ddf63471 ", "Hello, Duke");
499 test("%-10H", "DDF63471 ", "Hello, Duke");
500 test("%10h", " 402e0000", 15.0);
501 test("%10H", " 402E0000", 15.0);
502
503 //---------------------------------------------------------------------
504 // %h - errors
505 //---------------------------------------------------------------------
506 tryCatch("%#h", FormatFlagsConversionMismatchException.class);
507
508 //---------------------------------------------------------------------
509 // flag/conversion errors
510 //---------------------------------------------------------------------
511 tryCatch("%F", UnknownFormatConversionException.class);
512
513 tryCatch("%#g", FormatFlagsConversionMismatchException.class);
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862 //---------------------------------------------------------------------
863 // %s - double
864 //---------------------------------------------------------------------
865 double one = 1.0;
866 double ten = 10.0;
867 double pi = Math.PI;
868
869 test("%s", "3.141592653589793", pi);
870
871
872
873
874
875
876
877
878
879
880
881
882 //---------------------------------------------------------------------
883 // flag/conversion errors
884 //---------------------------------------------------------------------
885 tryCatch("%d", IllegalFormatConversionException.class, one);
886 tryCatch("%,.4e", FormatFlagsConversionMismatchException.class, one);
887
888 //---------------------------------------------------------------------
889 // %e
890 //
891 // Floating-point conversions applicable to float, double, and
892 // BigDecimal.
893 //---------------------------------------------------------------------
894 test("%e", "null", (Object)null);
895
896 //---------------------------------------------------------------------
897 // %e - float and double
898 //---------------------------------------------------------------------
899 // double PI = 3.141 592 653 589 793 238 46;
900 test("%e", "3.141593e+00", pi);
901 test("%.0e", "1e+01", ten);
902 test("%#.0e", "1.e+01", ten);
903 test("%E", "3.141593E+00", pi);
904 test("%10.3e", " 3.142e+00", pi);
905 test("%10.3e", "-3.142e+00", negate(pi));
906 test("%010.3e", "03.142e+00", pi);
907 test("%010.3e", "-3.142e+00", negate(pi));
908 test("%-12.3e", "3.142e+00 ", pi);
909 test("%-12.3e", "-3.142e+00 ", negate(pi));
910 test("%.3e", "3.142e+00", pi);
911 test("%.3e", "-3.142e+00", negate(pi));
912 test("%.3e", "3.142e+06", mult(pi, 1000000.0));
913 test("%.3e", "-3.142e+06", mult(pi, -1000000.0));
914
915 test(Locale.FRANCE, "%e", "3,141593e+00", pi);
916
917 // double PI^300
918 // = 13962455701329742638131355433930076081862072808 ... e+149
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950 test("%10.3e", " 1.000e+00", one);
951 test("%+.3e", "+3.142e+00", pi);
952 test("%+.3e", "-3.142e+00", negate(pi));
953 test("% .3e", " 3.142e+00", pi);
954 test("% .3e", "-3.142e+00", negate(pi));
955 test("%#.0e", "3.e+00", create(3.0));
956 test("%#.0e", "-3.e+00", create(-3.0));
957 test("%.0e", "3e+00", create(3.0));
958 test("%.0e", "-3e+00", create(-3.0));
959
960 test("%(.4e", "3.1416e+06", mult(pi, 1000000.0));
961 test("%(.4e", "(3.1416e+06)", mult(pi, -1000000.0));
962
963 //---------------------------------------------------------------------
964 // %e - boundary problems
965 //---------------------------------------------------------------------
966 test("%3.0e", "1e-06", 0.000001);
967 test("%3.0e", "1e-05", 0.00001);
968 test("%3.0e", "1e-04", 0.0001);
969 test("%3.0e", "1e-03", 0.001);
970 test("%3.0e", "1e-02", 0.01);
971 test("%3.0e", "1e-01", 0.1);
972 test("%3.0e", "9e-01", 0.9);
973 test("%3.1e", "9.0e-01", 0.9);
974 test("%3.0e", "1e+00", 1.00);
975 test("%3.0e", "1e+01", 10.00);
976 test("%3.0e", "1e+02", 99.19);
977 test("%3.1e", "9.9e+01", 99.19);
978 test("%3.0e", "1e+02", 99.99);
979 test("%3.0e", "1e+02", 100.00);
980 test("%#3.0e", "1.e+03", 1000.00);
981 test("%3.0e", "1e+04", 10000.00);
982 test("%3.0e", "1e+05", 100000.00);
983 test("%3.0e", "1e+06", 1000000.00);
984 test("%3.0e", "1e+07", 10000000.00);
985 test("%3.0e", "1e+08", 100000000.00);
986
987 //---------------------------------------------------------------------
988 // %f
989 //
990 // Floating-point conversions applicable to float, double, and
991 // BigDecimal.
992 //---------------------------------------------------------------------
993 test("%f", "null", (Object)null);
994 test("%f", "3.141593", pi);
995 test(Locale.FRANCE, "%f", "3,141593", pi);
996 test("%10.3f", " 3.142", pi);
997 test("%10.3f", " -3.142", negate(pi));
998 test("%010.3f", "000003.142", pi);
999 test("%010.3f", "-00003.142", negate(pi));
1000 test("%-10.3f", "3.142 ", pi);
1001 test("%-10.3f", "-3.142 ", negate(pi));
1002 test("%.3f", "3.142", pi);
1003 test("%.3f", "-3.142", negate(pi));
1004 test("%+.3f", "+3.142", pi);
1005 test("%+.3f", "-3.142", negate(pi));
1006 test("% .3f", " 3.142", pi);
1007 test("% .3f", "-3.142", negate(pi));
1008 test("%#.0f", "3.", create(3.0));
1009 test("%#.0f", "-3.", create(-3.0));
1010 test("%.0f", "3", create(3.0));
1011 test("%.0f", "-3", create(-3.0));
1012 test("%.3f", "10.000", ten);
1013 test("%.3f", "1.000", one);
1014 test("%10.3f", " 1.000", one);
1015
1016 //---------------------------------------------------------------------
1017 // %f - boundary problems
1018 //---------------------------------------------------------------------
1019 test("%3.0f", " 0", 0.000001);
1020 test("%3.0f", " 0", 0.00001);
1021 test("%3.0f", " 0", 0.0001);
1022 test("%3.0f", " 0", 0.001);
1023 test("%3.0f", " 0", 0.01);
1024 test("%3.0f", " 0", 0.1);
1025 test("%3.0f", " 1", 0.9);
1026 test("%3.1f", "0.9", 0.9);
1027 test("%3.0f", " 1", 1.00);
1028 test("%3.0f", " 10", 10.00);
1029 test("%3.0f", " 99", 99.19);
1030 test("%3.1f", "99.2", 99.19);
1031 test("%3.0f", "100", 99.99);
1032 test("%3.0f", "100", 100.00);
1033 test("%#3.0f", "1000.", 1000.00);
1034 test("%3.0f", "10000", 10000.00);
1035 test("%3.0f", "100000", 100000.00);
1036 test("%3.0f", "1000000", 1000000.00);
1037 test("%3.0f", "10000000", 10000000.00);
1038 test("%3.0f", "100000000", 100000000.00);
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132 //---------------------------------------------------------------------
1133 // %f - float, double, Double, BigDecimal
1134 //---------------------------------------------------------------------
1135 test("%.3f", "3141592.654", mult(pi, 1000000.0));
1136 test("%.3f", "-3141592.654", mult(pi, -1000000.0));
1137 test("%,.4f", "3,141,592.6536", mult(pi, 1000000.0));
1138 test(Locale.FRANCE, "%,.4f", "3\u00a0141\u00a0592,6536", mult(pi, 1000000.0));
1139 test("%,.4f", "-3,141,592.6536", mult(pi, -1000000.0));
1140 test("%(.4f", "3141592.6536", mult(pi, 1000000.0));
1141 test("%(.4f", "(3141592.6536)", mult(pi, -1000000.0));
1142 test("%(,.4f", "3,141,592.6536", mult(pi, 1000000.0));
1143 test("%(,.4f", "(3,141,592.6536)", mult(pi, -1000000.0));
1144
1145
1146
1147
1148 //---------------------------------------------------------------------
1149 // %g
1150 //
1151 // Floating-point conversions applicable to float, double, and
1152 // BigDecimal.
1153 //---------------------------------------------------------------------
1154 test("%g", "null", (Object)null);
1155 test("%g", "3.14159", pi);
1156 test(Locale.FRANCE, "%g", "3,14159", pi);
1157 test("%.0g", "1e+01", ten);
1158 test("%G", "3.14159", pi);
1159 test("%10.3g", " 3.14", pi);
1160 test("%10.3g", " -3.14", negate(pi));
1161 test("%010.3g", "0000003.14", pi);
1162 test("%010.3g", "-000003.14", negate(pi));
1163 test("%-12.3g", "3.14 ", pi);
1164 test("%-12.3g", "-3.14 ", negate(pi));
1165 test("%.3g", "3.14", pi);
1166 test("%.3g", "-3.14", negate(pi));
1167 test("%.3g", "3.14e+08", mult(pi, 100000000.0));
1168 test("%.3g", "-3.14e+08", mult(pi, -100000000.0));
1169
1170 test("%.3g", "1.00e-05", recip(create(100000.0)));
1171 test("%.3g", "-1.00e-05", recip(create(-100000.0)));
1172 test("%.0g", "-1e-05", recip(create(-100000.0)));
1173 test("%.0g", "1e+05", create(100000.0));
1174 test("%.3G", "1.00E-05", recip(create(100000.0)));
1175 test("%.3G", "-1.00E-05", recip(create(-100000.0)));
1176
1177 test("%.1g", "-0", -0.0);
1178 test("%3.0g", " -0", -0.0);
1179 test("%.1g", "0", 0.0);
1180 test("%3.0g", " 0", 0.0);
1181 test("%.1g", "0", +0.0);
1182 test("%3.0g", " 0", +0.0);
1183
1184 test("%3.0g", "1e-06", 0.000001);
1185 test("%3.0g", "1e-05", 0.00001);
1186 test("%3.0g", "1e-05", 0.0000099);
1187 test("%3.1g", "1e-05", 0.0000099);
1188 test("%3.2g", "9.9e-06", 0.0000099);
1189 test("%3.0g", "0.0001", 0.0001);
1190 test("%3.0g", "9e-05", 0.00009);
1191 test("%3.0g", "0.0001", 0.000099);
1192 test("%3.1g", "0.0001", 0.000099);
1193 test("%3.2g", "9.9e-05", 0.000099);
1194 test("%3.0g", "0.001", 0.001);
1195 test("%3.0g", "0.001", 0.00099);
1196 test("%3.1g", "0.001", 0.00099);
1197 test("%3.2g", "0.00099", 0.00099);
1198 test("%3.3g", "0.00100", 0.001);
1199 test("%3.4g", "0.001000", 0.001);
1200 test("%3.0g", "0.01", 0.01);
1201 test("%3.0g", "0.1", 0.1);
1202 test("%3.0g", "0.9", 0.9);
1203 test("%3.1g", "0.9", 0.9);
1204 test("%3.0g", " 1", 1.00);
1205 test("%3.2g", " 10", 10.00);
1206 test("%3.0g", "1e+01", 10.00);
1207 test("%3.0g", "1e+02", 99.19);
1208 test("%3.1g", "1e+02", 99.19);
1209 test("%3.2g", " 99", 99.19);
1210 test("%3.0g", "1e+02", 99.9);
1211 test("%3.1g", "1e+02", 99.9);
1212 test("%3.2g", "1.0e+02", 99.9);
1213 test("%3.0g", "1e+02", 99.99);
1214 test("%3.0g", "1e+02", 100.00);
1215 test("%3.0g", "1e+03", 999.9);
1216 test("%3.1g", "1e+03", 999.9);
1217 test("%3.2g", "1.0e+03", 999.9);
1218 test("%3.3g", "1.00e+03", 999.9);
1219 test("%3.4g", "999.9", 999.9);
1220 test("%3.4g", "1000", 999.99);
1221 test("%3.0g", "1e+03", 1000.00);
1222 test("%3.0g", "1e+04", 10000.00);
1223 test("%3.0g", "1e+05", 100000.00);
1224 test("%3.0g", "1e+06", 1000000.00);
1225 test("%3.0g", "1e+07", 10000000.00);
1226 test("%3.9g", "100000000", 100000000.00);
1227 test("%3.10g", "100000000.0", 100000000.00);
1228
1229 tryCatch("%#3.0g", FormatFlagsConversionMismatchException.class, 1000.00);
1230
1231 // double PI^300
1232 // = 13962455701329742638131355433930076081862072808 ... e+149
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 test("%.3g", "10.0", ten);
1271 test("%.3g", "1.00", one);
1272 test("%10.3g", " 1.00", one);
1273 test("%+10.3g", " +3.14", pi);
1274 test("%+10.3g", " -3.14", negate(pi));
1275 test("% .3g", " 3.14", pi);
1276 test("% .3g", "-3.14", negate(pi));
1277 test("%.0g", "3", create(3.0));
1278 test("%.0g", "-3", create(-3.0));
1279
1280 test("%(.4g", "3.142e+08", mult(pi, 100000000.0));
1281 test("%(.4g", "(3.142e+08)", mult(pi, -100000000.0));
1282
1283
1284
1285
1286
1287
1288
1289 test("%,.11g", "3,141,592.6536", mult(pi, 1000000.0));
1290 test("%(,.11g", "(3,141,592.6536)", mult(pi, -1000000.0));
1291
1292
1293
1294
1295 //---------------------------------------------------------------------
1296 // %a
1297 //
1298 // Floating-point conversions applicable to float, double, and
1299 // BigDecimal.
1300 //---------------------------------------------------------------------
1301 test("%a", "null", (Object)null);
1302 test("%.11a", "0x0.00000000000p0", 0.0);
1303 test(Locale.FRANCE, "%.11a", "0x0.00000000000p0", 0.0); // no localization
1304 test("%.1a", "0x0.0p0", 0.0);
1305 test("%.11a", "-0x0.00000000000p0", -0.0);
1306 test("%.1a", "-0x0.0p0", -0.0);
1307 test("%.11a", "0x1.00000000000p0", 1.0);
1308 test("%.1a", "0x1.0p0", 1.0);
1309 test("%.11a", "-0x1.00000000000p0", -1.0);
1310 test("%.1a", "-0x1.0p0", -1.0);
1311 test("%.11a", "0x1.80000000000p1", 3.0);
1312 test("%.1a", "0x1.8p1", 3.0);
1313 test("%.11a", "0x1.00000000000p-1022", Double.MIN_NORMAL);
1314 test("%.1a", "0x1.0p-1022", Double.MIN_NORMAL);
1315 test("%.11a", "0x1.00000000000p-1022",
1316 Math.nextDown(Double.MIN_NORMAL));
1317 test("%.1a", "0x1.0p-1022",
1318 Math.nextDown(Double.MIN_NORMAL));
1319 test("%.11a", "0x1.ffffffffffep-1023", 0x0.fffffffffffp-1022);
1320 test("%.1a", "0x1.0p-1022", 0x0.fffffffffffp-1022);
1321 test("%.30a", "0x0.000000000000100000000000000000p-1022", Double.MIN_VALUE);
1322 test("%.13a", "0x0.0000000000001p-1022", Double.MIN_VALUE);
1323 test("%.11a", "0x1.00000000000p-1074", Double.MIN_VALUE);
1324 test("%.1a", "0x1.0p-1074", Double.MIN_VALUE);
1325
1326 test("%.11a", "0x1.08000000000p-1069",
1327 Double.MIN_VALUE + Double.MIN_VALUE*32);
1328 test("%.1a", "0x1.0p-1069",
1329 Double.MIN_VALUE + Double.MIN_VALUE*32);
1330 test("%.30a", "0x1.fffffffffffff00000000000000000p1023", Double.MAX_VALUE);
1331 test("%.13a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
1332 test("%.11a", "0x1.00000000000p1024", Double.MAX_VALUE);
1333 test("%.1a", "0x1.0p1024", Double.MAX_VALUE);
1334 test("%.11a", "0x1.18000000000p0", 0x1.18p0);
1335 test("%.1a", "0x1.2p0", 0x1.18p0);
1336
1337 test("%.11a", "0x1.18000000000p0", 0x1.180000000001p0);
1338 test("%.1a", "0x1.2p0", 0x1.180000000001p0);
1339 test("%.11a", "0x1.28000000000p0", 0x1.28p0);
1340 test("%.1a", "0x1.2p0", 0x1.28p0);
1341
1342 test("%.11a", "0x1.28000000000p0", 0x1.280000000001p0);
1343 test("%.1a", "0x1.3p0", 0x1.280000000001p0);
1344
1345 test("%a", "0x0.123p-1022", 0x0.123p-1022);
1346 test("%1.3a", "0x1.230p-1026", 0x0.123p-1022);
1347 test("%1.12a", "0x1.230000000000p-1026", 0x0.123p-1022);
1348 test("%1.15a", "0x0.123000000000000p-1022", 0x0.123p-1022);
1349 test("%1.5a", "0x1.00000p-1074", 0x0.0000000000001p-1022);
1350 test("%1.7a", "0x1.0000000p-1022", 0x0.fffffffffffffp-1022);
1351
1352 test("%1.6a", "0x1.230000p-1026", 0x0.123000057p-1022);
1353 test("%1.7a", "0x1.2300005p-1026", 0x0.123000057p-1022);
1354 test("%1.8a", "0x1.23000057p-1026", 0x0.123000057p-1022);
1355 test("%1.9a", "0x1.230000570p-1026", 0x0.123000057p-1022);
1356
1357 test("%1.6a", "0x1.230000p-1026", 0x0.123000058p-1022);
1358 test("%1.7a", "0x1.2300006p-1026", 0x0.123000058p-1022);
1359 test("%1.8a", "0x1.23000058p-1026", 0x0.123000058p-1022);
1360 test("%1.9a", "0x1.230000580p-1026", 0x0.123000058p-1022);
1361
1362 test("%1.6a", "0x1.230000p-1026", 0x0.123000059p-1022);
1363 test("%1.7a", "0x1.2300006p-1026", 0x0.123000059p-1022);
1364 test("%1.8a", "0x1.23000059p-1026", 0x0.123000059p-1022);
1365 test("%1.9a", "0x1.230000590p-1026", 0x0.123000059p-1022);
1366
1367 test("%1.4a", "0x1.0000p-1022", Math.nextDown(Double.MIN_NORMAL));
1368
1369 test("%a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
1370 test("%1.1a", "0x1.0p1024", Double.MAX_VALUE);
1371 test("%1.2a", "0x1.00p1024", Double.MAX_VALUE);
1372 test("%1.6a", "0x1.000000p1024", Double.MAX_VALUE);
1373 test("%1.9a", "0x1.000000000p1024", Double.MAX_VALUE);
1374 test("%1.11a", "0x1.00000000000p1024", Double.MAX_VALUE);
1375 test("%1.12a", "0x1.000000000000p1024", Double.MAX_VALUE);
1376 test("%1.13a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
1377
1378
1379
1380 //---------------------------------------------------------------------
1381 // %f, %e, %g, %a - Boundaries
1382 //---------------------------------------------------------------------
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552 //---------------------------------------------------------------------
1553 // %f, %e, %g, %a - Double.MIN_VALUE
1554 //---------------------------------------------------------------------
1555 test("%f", "0.000000", Double.MIN_VALUE);
1556 test("%,f", "0.000000", Double.MIN_VALUE);
1557 test("%(f", "(0.000000)", -Double.MIN_VALUE);
1558 test("%30.0f", " 0", Double.MIN_VALUE);
1559 test("%30.5f", " 0.00000", Double.MIN_VALUE);
1560 test("%30.13f", " 0.0000000000000", Double.MIN_VALUE);
1561 test("%30.20f", " 0.00000000000000000000", Double.MIN_VALUE);
1562 test("%30.350f","0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490000000000000000000000000",
1563 Double.MIN_VALUE);
1564 test("%e", "4.900000e-324", Double.MIN_VALUE);
1565 test("%E", "4.900000E-324", Double.MIN_VALUE);
1566 test("%(.1e", "4.9e-324", Double.MIN_VALUE);
1567 test("%(E", "(4.900000E-324)", -Double.MIN_VALUE);
1568 test("%30.5e", " 4.90000e-324", Double.MIN_VALUE);
1569 test("%30.13e", " 4.9000000000000e-324", Double.MIN_VALUE);
1570 test("%30.20e", " 4.90000000000000000000e-324", Double.MIN_VALUE);
1595 test("%30.20f", "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00000000000000000000",
1596 Double.MAX_VALUE);
1597 test("%e", "1.797693e+308", Double.MAX_VALUE);
1598 test("%E", "1.797693E+308", Double.MAX_VALUE);
1599 test("%(e", "1.797693e+308", Double.MAX_VALUE);
1600 test("%(e", "(1.797693e+308)", -Double.MAX_VALUE);
1601 test("%30.5e", " 1.79769e+308", Double.MAX_VALUE);
1602 test("%30.13e", " 1.7976931348623e+308", Double.MAX_VALUE);
1603 test("%30.20e", " 1.79769313486231570000e+308", Double.MAX_VALUE);
1604 test("%g", "1.79769e+308", Double.MAX_VALUE);
1605 test("%G", "1.79769E+308", Double.MAX_VALUE);
1606 test("%,g", "1.79769e+308", Double.MAX_VALUE);
1607 test("%(g", "(1.79769e+308)", -Double.MAX_VALUE);
1608 test("%30.5g", " 1.7977e+308", Double.MAX_VALUE);
1609 test("%30.13g", " 1.797693134862e+308", Double.MAX_VALUE);
1610 test("%30.20g", " 1.7976931348623157000e+308", Double.MAX_VALUE);
1611 test("%a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
1612 test("%A", "0X1.FFFFFFFFFFFFFP1023", Double.MAX_VALUE);
1613 test("%30a", " 0x1.fffffffffffffp1023", Double.MAX_VALUE);
1614
1615
1616
1617
1618 //---------------------------------------------------------------------
1619 // %t
1620 //
1621 // Date/Time conversions applicable to Calendar, Date, and long.
1622 //---------------------------------------------------------------------
1623 test("%tA", "null", (Object)null);
1624 test("%TA", "NULL", (Object)null);
1625
1626 //---------------------------------------------------------------------
1627 // %t - errors
1628 //---------------------------------------------------------------------
1629 tryCatch("%t", UnknownFormatConversionException.class);
1630 tryCatch("%T", UnknownFormatConversionException.class);
1631 tryCatch("%tP", UnknownFormatConversionException.class);
1632 tryCatch("%TP", UnknownFormatConversionException.class);
1633 tryCatch("%.5tB", IllegalFormatPrecisionException.class);
1634 tryCatch("%#tB", FormatFlagsConversionMismatchException.class);
1635 tryCatch("%-tB", MissingFormatWidthException.class);
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731 //---------------------------------------------------------------------
1732 // %n
1733 //---------------------------------------------------------------------
1734 test("%n", System.getProperty("line.separator"), (Object)null);
1735 test("%n", System.getProperty("line.separator"), "");
1736
1737 tryCatch("%,n", IllegalFormatFlagsException.class);
1738 tryCatch("%.n", UnknownFormatConversionException.class);
1739 tryCatch("%5.n", UnknownFormatConversionException.class);
1740 tryCatch("%5n", IllegalFormatWidthException.class);
1741 tryCatch("%.7n", IllegalFormatPrecisionException.class);
1742 tryCatch("%<n", IllegalFormatFlagsException.class);
1743
1744 //---------------------------------------------------------------------
1745 // %%
1746 //---------------------------------------------------------------------
1747 test("%%", "%", (Object)null);
1748 test("%%", "%", "");
1749 tryCatch("%%%", UnknownFormatConversionException.class);
|
1 /*
2 * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /* Type-specific source code for unit test
25 *
26 * Regenerate the BasicX classes via genBasic.sh whenever this file changes.
27 * We check in the generated source files so that the test tree can be used
28 * independently of the rest of the source tree.
29 */
30
31 // -- This file was mechanically generated: Do not edit! -- //
32
33 import java.io.*;
34 import java.math.BigDecimal;
35 import java.math.BigInteger;
36 import java.text.DateFormatSymbols;
37 import java.util.*;
38
39 import sun.misc.DoubleConsts;
40
41 import static java.util.Calendar.*;
42
43 public class BasicDouble extends Basic {
44
45 private static void test(String fs, String exp, Object ... args) {
46 Formatter f = new Formatter(new StringBuilder(), Locale.US);
47 f.format(fs, args);
48 ck(fs, exp, f.toString());
49
50 f = new Formatter(new StringBuilder(), Locale.US);
51 f.format("foo " + fs + " bar", args);
52 ck(fs, "foo " + exp + " bar", f.toString());
53 }
54
55 private static void test(Locale l, String fs, String exp, Object ... args)
56 {
57 Formatter f = new Formatter(new StringBuilder(), l);
58 f.format(fs, args);
59 ck(fs, exp, f.toString());
60
61 f = new Formatter(new StringBuilder(), l);
62 f.format("foo " + fs + " bar", args);
63 ck(fs, "foo " + exp + " bar", f.toString());
64 }
65
66 private static void test(String fs, Object ... args) {
67 Formatter f = new Formatter(new StringBuilder(), Locale.US);
68 f.format(fs, args);
69 ck(fs, "fail", f.toString());
70 }
71
72 private static void test(String fs) {
73 Formatter f = new Formatter(new StringBuilder(), Locale.US);
74 f.format(fs, "fail");
75 ck(fs, "fail", f.toString());
76 }
77
78 private static void testSysOut(String fs, String exp, Object ... args) {
79 FileOutputStream fos = null;
80 FileInputStream fis = null;
81 try {
82 PrintStream saveOut = System.out;
83 fos = new FileOutputStream("testSysOut");
121 if (!caught)
122 fail(fs, ex);
123 else
124 pass();
125 }
126
127 private static void tryCatch(String fs, Class<?> ex, Object ... args) {
128 boolean caught = false;
129 try {
130 test(fs, args);
131 } catch (Throwable x) {
132 if (ex.isAssignableFrom(x.getClass()))
133 caught = true;
134 }
135 if (!caught)
136 fail(fs, ex);
137 else
138 pass();
139 }
140
141 private static double create(double v) {
142 return (double) v;
143 }
144
145 private static double negate(double v) {
146 return -v;
147 }
148
149 private static double mult(double v, double mul) {
150 return v * mul;
151 }
152
153 private static double recip(double v) {
154 return 1.0 / v;
155 }
156
157 public static void test() {
158 TimeZone.setDefault(TimeZone.getTimeZone("GMT-0800"));
159
160 // Any characters not explicitly defined as conversions, date/time
161 // conversion suffixes, or flags are illegal and are reserved for
162 // future extensions. Use of such a character in a format string will
163 // cause an UnknownFormatConversionException or
164 // UnknownFormatFlagsException to be thrown.
165 tryCatch("%q", UnknownFormatConversionException.class);
166 tryCatch("%t&", UnknownFormatConversionException.class);
167 tryCatch("%&d", UnknownFormatConversionException.class);
168 tryCatch("%^b", UnknownFormatConversionException.class);
169
170 //---------------------------------------------------------------------
171 // Formatter.java class javadoc examples
172 //---------------------------------------------------------------------
173 test(Locale.FRANCE, "e = %+10.4f", "e = +2,7183", Math.E);
174 test("%4$2s %3$2s %2$2s %1$2s", " d c b a", "a", "b", "c", "d");
175 test("Amount gained or lost since last statement: $ %,(.2f",
176 "Amount gained or lost since last statement: $ (6,217.58)",
322 test("%h", Integer.toHexString("Hello, Duke".hashCode()),
323 "Hello, Duke");
324 test("%10h", " ddf63471", "Hello, Duke");
325 test("%-10h", "ddf63471 ", "Hello, Duke");
326 test("%-10H", "DDF63471 ", "Hello, Duke");
327 test("%10h", " 402e0000", 15.0);
328 test("%10H", " 402E0000", 15.0);
329
330 //---------------------------------------------------------------------
331 // %h - errors
332 //---------------------------------------------------------------------
333 tryCatch("%#h", FormatFlagsConversionMismatchException.class);
334
335 //---------------------------------------------------------------------
336 // flag/conversion errors
337 //---------------------------------------------------------------------
338 tryCatch("%F", UnknownFormatConversionException.class);
339
340 tryCatch("%#g", FormatFlagsConversionMismatchException.class);
341
342 //---------------------------------------------------------------------
343 // %s - double
344 //---------------------------------------------------------------------
345 double one = 1.0;
346 double ten = 10.0;
347 double pi = Math.PI;
348
349 test("%s", "3.141592653589793", pi);
350
351 //---------------------------------------------------------------------
352 // flag/conversion errors
353 //---------------------------------------------------------------------
354 tryCatch("%d", IllegalFormatConversionException.class, one);
355 tryCatch("%,.4e", FormatFlagsConversionMismatchException.class, one);
356
357 //---------------------------------------------------------------------
358 // %e
359 //
360 // Floating-point conversions applicable to float, double, and
361 // BigDecimal.
362 //---------------------------------------------------------------------
363 test("%e", "null", (Object)null);
364
365 //---------------------------------------------------------------------
366 // %e - float and double
367 //---------------------------------------------------------------------
368 // double PI = 3.141 592 653 589 793 238 46;
369 test("%e", "3.141593e+00", pi);
370 test("%.0e", "1e+01", ten);
371 test("%#.0e", "1.e+01", ten);
372 test("%E", "3.141593E+00", pi);
373 test("%10.3e", " 3.142e+00", pi);
374 test("%10.3e", "-3.142e+00", negate(pi));
375 test("%010.3e", "03.142e+00", pi);
376 test("%010.3e", "-3.142e+00", negate(pi));
377 test("%-12.3e", "3.142e+00 ", pi);
378 test("%-12.3e", "-3.142e+00 ", negate(pi));
379 test("%.3e", "3.142e+00", pi);
380 test("%.3e", "-3.142e+00", negate(pi));
381 test("%.3e", "3.142e+06", mult(pi, 1000000.0));
382 test("%.3e", "-3.142e+06", mult(pi, -1000000.0));
383
384 test(Locale.FRANCE, "%e", "3,141593e+00", pi);
385
386 // double PI^300
387 // = 13962455701329742638131355433930076081862072808 ... e+149
388
389 test("%10.3e", " 1.000e+00", one);
390 test("%+.3e", "+3.142e+00", pi);
391 test("%+.3e", "-3.142e+00", negate(pi));
392 test("% .3e", " 3.142e+00", pi);
393 test("% .3e", "-3.142e+00", negate(pi));
394 test("%#.0e", "3.e+00", create(3.0));
395 test("%#.0e", "-3.e+00", create(-3.0));
396 test("%.0e", "3e+00", create(3.0));
397 test("%.0e", "-3e+00", create(-3.0));
398
399 test("%(.4e", "3.1416e+06", mult(pi, 1000000.0));
400 test("%(.4e", "(3.1416e+06)", mult(pi, -1000000.0));
401
402 //---------------------------------------------------------------------
403 // %e - boundary problems
404 //---------------------------------------------------------------------
405 test("%3.0e", "1e-06", 0.000001);
406 test("%3.0e", "1e-05", 0.00001);
407 test("%3.0e", "1e-04", 0.0001);
408 test("%3.0e", "1e-03", 0.001);
409 test("%3.0e", "1e-02", 0.01);
410 test("%3.0e", "1e-01", 0.1);
411 test("%3.0e", "9e-01", 0.9);
412 test("%3.1e", "9.0e-01", 0.9);
413 test("%3.0e", "1e+00", 1.00);
414 test("%3.0e", "1e+01", 10.00);
415 test("%3.0e", "1e+02", 99.19);
416 test("%3.1e", "9.9e+01", 99.19);
417 test("%3.0e", "1e+02", 99.99);
418 test("%3.0e", "1e+02", 100.00);
419 test("%#3.0e", "1.e+03", 1000.00);
420 test("%3.0e", "1e+04", 10000.00);
421 test("%3.0e", "1e+05", 100000.00);
422 test("%3.0e", "1e+06", 1000000.00);
423 test("%3.0e", "1e+07", 10000000.00);
424 test("%3.0e", "1e+08", 100000000.00);
425
426 //---------------------------------------------------------------------
427 // %f
428 //
429 // Floating-point conversions applicable to float, double, and
430 // BigDecimal.
431 //---------------------------------------------------------------------
432 test("%f", "null", (Object)null);
433 test("%f", "3.141593", pi);
434 test(Locale.FRANCE, "%f", "3,141593", pi);
435 test("%10.3f", " 3.142", pi);
436 test("%10.3f", " -3.142", negate(pi));
437 test("%010.3f", "000003.142", pi);
438 test("%010.3f", "-00003.142", negate(pi));
439 test("%-10.3f", "3.142 ", pi);
440 test("%-10.3f", "-3.142 ", negate(pi));
441 test("%.3f", "3.142", pi);
442 test("%.3f", "-3.142", negate(pi));
443 test("%+.3f", "+3.142", pi);
444 test("%+.3f", "-3.142", negate(pi));
445 test("% .3f", " 3.142", pi);
446 test("% .3f", "-3.142", negate(pi));
447 test("%#.0f", "3.", create(3.0));
448 test("%#.0f", "-3.", create(-3.0));
449 test("%.0f", "3", create(3.0));
450 test("%.0f", "-3", create(-3.0));
451 test("%.3f", "10.000", ten);
452 test("%.3f", "1.000", one);
453 test("%10.3f", " 1.000", one);
454
455 //---------------------------------------------------------------------
456 // %f - boundary problems
457 //---------------------------------------------------------------------
458 test("%3.0f", " 0", 0.000001);
459 test("%3.0f", " 0", 0.00001);
460 test("%3.0f", " 0", 0.0001);
461 test("%3.0f", " 0", 0.001);
462 test("%3.0f", " 0", 0.01);
463 test("%3.0f", " 0", 0.1);
464 test("%3.0f", " 1", 0.9);
465 test("%3.1f", "0.9", 0.9);
466 test("%3.0f", " 1", 1.00);
467 test("%3.0f", " 10", 10.00);
468 test("%3.0f", " 99", 99.19);
469 test("%3.1f", "99.2", 99.19);
470 test("%3.0f", "100", 99.99);
471 test("%3.0f", "100", 100.00);
472 test("%#3.0f", "1000.", 1000.00);
473 test("%3.0f", "10000", 10000.00);
474 test("%3.0f", "100000", 100000.00);
475 test("%3.0f", "1000000", 1000000.00);
476 test("%3.0f", "10000000", 10000000.00);
477 test("%3.0f", "100000000", 100000000.00);
478 test("%10.0f", " 1000000", 1000000.00);
479 test("%,10.0f", " 1,000,000", 1000000.00);
480 test("%,10.1f", "1,000,000.0", 1000000.00);
481 test("%,3.0f", "1,000,000", 1000000.00);
482 test("%,3.0f", "10,000,000", 10000000.00);
483 test("%,3.0f", "100,000,000", 100000000.00);
484 test("%,3.0f", "10,000,000", 10000000.00);
485 test("%,3.0f", "100,000,000", 100000000.00);
486
487 //---------------------------------------------------------------------
488 // %f - float, double, Double, BigDecimal
489 //---------------------------------------------------------------------
490 test("%.3f", "3141592.654", mult(pi, 1000000.0));
491 test("%.3f", "-3141592.654", mult(pi, -1000000.0));
492 test("%,.4f", "3,141,592.6536", mult(pi, 1000000.0));
493 test(Locale.FRANCE, "%,.4f", "3\u00a0141\u00a0592,6536", mult(pi, 1000000.0));
494 test("%,.4f", "-3,141,592.6536", mult(pi, -1000000.0));
495 test("%(.4f", "3141592.6536", mult(pi, 1000000.0));
496 test("%(.4f", "(3141592.6536)", mult(pi, -1000000.0));
497 test("%(,.4f", "3,141,592.6536", mult(pi, 1000000.0));
498 test("%(,.4f", "(3,141,592.6536)", mult(pi, -1000000.0));
499
500 //---------------------------------------------------------------------
501 // %g
502 //
503 // Floating-point conversions applicable to float, double, and
504 // BigDecimal.
505 //---------------------------------------------------------------------
506 test("%g", "null", (Object)null);
507 test("%g", "3.14159", pi);
508 test(Locale.FRANCE, "%g", "3,14159", pi);
509 test("%.0g", "1e+01", ten);
510 test("%G", "3.14159", pi);
511 test("%10.3g", " 3.14", pi);
512 test("%10.3g", " -3.14", negate(pi));
513 test("%010.3g", "0000003.14", pi);
514 test("%010.3g", "-000003.14", negate(pi));
515 test("%-12.3g", "3.14 ", pi);
516 test("%-12.3g", "-3.14 ", negate(pi));
517 test("%.3g", "3.14", pi);
518 test("%.3g", "-3.14", negate(pi));
519 test("%.3g", "3.14e+08", mult(pi, 100000000.0));
520 test("%.3g", "-3.14e+08", mult(pi, -100000000.0));
521
522 test("%.3g", "1.00e-05", recip(create(100000.0)));
523 test("%.3g", "-1.00e-05", recip(create(-100000.0)));
524 test("%.0g", "-1e-05", recip(create(-100000.0)));
525 test("%.0g", "1e+05", create(100000.0));
526 test("%.3G", "1.00E-05", recip(create(100000.0)));
527 test("%.3G", "-1.00E-05", recip(create(-100000.0)));
528
529 test("%.1g", "-0", -0.0);
530 test("%3.0g", " -0", -0.0);
531 test("%.1g", "0", 0.0);
532 test("%3.0g", " 0", 0.0);
533 test("%.1g", "0", +0.0);
534 test("%3.0g", " 0", +0.0);
535
536 test("%3.0g", "1e-06", 0.000001);
537 test("%3.0g", "1e-05", 0.00001);
538 test("%3.0g", "1e-05", 0.0000099);
539 test("%3.1g", "1e-05", 0.0000099);
540 test("%3.2g", "9.9e-06", 0.0000099);
541 test("%3.0g", "0.0001", 0.0001);
542 test("%3.0g", "9e-05", 0.00009);
543 test("%3.0g", "0.0001", 0.000099);
544 test("%3.1g", "0.0001", 0.000099);
545 test("%3.2g", "9.9e-05", 0.000099);
546 test("%3.0g", "0.001", 0.001);
547 test("%3.0g", "0.001", 0.00099);
548 test("%3.1g", "0.001", 0.00099);
549 test("%3.2g", "0.00099", 0.00099);
550 test("%3.3g", "0.00100", 0.001);
551 test("%3.4g", "0.001000", 0.001);
552 test("%3.0g", "0.01", 0.01);
553 test("%3.0g", "0.1", 0.1);
554 test("%3.0g", "0.9", 0.9);
555 test("%3.1g", "0.9", 0.9);
556 test("%3.0g", " 1", 1.00);
557 test("%3.2g", " 10", 10.00);
558 test("%3.0g", "1e+01", 10.00);
559 test("%3.0g", "1e+02", 99.19);
560 test("%3.1g", "1e+02", 99.19);
561 test("%3.2g", " 99", 99.19);
562 test("%3.0g", "1e+02", 99.9);
563 test("%3.1g", "1e+02", 99.9);
564 test("%3.2g", "1.0e+02", 99.9);
565 test("%3.0g", "1e+02", 99.99);
566 test("%3.0g", "1e+02", 100.00);
567 test("%3.0g", "1e+03", 999.9);
568 test("%3.1g", "1e+03", 999.9);
569 test("%3.2g", "1.0e+03", 999.9);
570 test("%3.3g", "1.00e+03", 999.9);
571 test("%3.4g", "999.9", 999.9);
572 test("%3.4g", "1000", 999.99);
573 test("%3.0g", "1e+03", 1000.00);
574 test("%3.0g", "1e+04", 10000.00);
575 test("%3.0g", "1e+05", 100000.00);
576 test("%3.0g", "1e+06", 1000000.00);
577 test("%3.0g", "1e+07", 10000000.00);
578 test("%3.9g", "100000000", 100000000.00);
579 test("%3.10g", "100000000.0", 100000000.00);
580
581 tryCatch("%#3.0g", FormatFlagsConversionMismatchException.class, 1000.00);
582
583 // double PI^300
584 // = 13962455701329742638131355433930076081862072808 ... e+149
585
586 test("%.3g", "10.0", ten);
587 test("%.3g", "1.00", one);
588 test("%10.3g", " 1.00", one);
589 test("%+10.3g", " +3.14", pi);
590 test("%+10.3g", " -3.14", negate(pi));
591 test("% .3g", " 3.14", pi);
592 test("% .3g", "-3.14", negate(pi));
593 test("%.0g", "3", create(3.0));
594 test("%.0g", "-3", create(-3.0));
595
596 test("%(.4g", "3.142e+08", mult(pi, 100000000.0));
597 test("%(.4g", "(3.142e+08)", mult(pi, -100000000.0));
598
599 test("%,.11g", "3,141,592.6536", mult(pi, 1000000.0));
600 test("%(,.11g", "(3,141,592.6536)", mult(pi, -1000000.0));
601
602 //---------------------------------------------------------------------
603 // %a
604 //
605 // Floating-point conversions applicable to float, double, and
606 // BigDecimal.
607 //---------------------------------------------------------------------
608 test("%a", "null", (Object)null);
609 test("%.11a", "0x0.00000000000p0", 0.0);
610 test(Locale.FRANCE, "%.11a", "0x0.00000000000p0", 0.0); // no localization
611 test("%.1a", "0x0.0p0", 0.0);
612 test("%.11a", "-0x0.00000000000p0", -0.0);
613 test("%.1a", "-0x0.0p0", -0.0);
614 test("%.11a", "0x1.00000000000p0", 1.0);
615 test("%.1a", "0x1.0p0", 1.0);
616 test("%.11a", "-0x1.00000000000p0", -1.0);
617 test("%.1a", "-0x1.0p0", -1.0);
618 test("%.11a", "0x1.80000000000p1", 3.0);
619 test("%.1a", "0x1.8p1", 3.0);
620 test("%.11a", "0x1.00000000000p-1022", DoubleConsts.MIN_NORMAL);
621 test("%.1a", "0x1.0p-1022", DoubleConsts.MIN_NORMAL);
622 test("%.11a", "0x1.00000000000p-1022",
623 Math.nextDown(DoubleConsts.MIN_NORMAL));
624 test("%.1a", "0x1.0p-1022",
625 Math.nextDown(DoubleConsts.MIN_NORMAL));
626 test("%.11a", "0x1.ffffffffffep-1023", 0x0.fffffffffffp-1022);
627 test("%.1a", "0x1.0p-1022", 0x0.fffffffffffp-1022);
628 test("%.30a", "0x0.000000000000100000000000000000p-1022", Double.MIN_VALUE);
629 test("%.13a", "0x0.0000000000001p-1022", Double.MIN_VALUE);
630 test("%.11a", "0x1.00000000000p-1074", Double.MIN_VALUE);
631 test("%.1a", "0x1.0p-1074", Double.MIN_VALUE);
632
633 test("%.11a", "0x1.08000000000p-1069",
634 Double.MIN_VALUE + Double.MIN_VALUE*32);
635 test("%.1a", "0x1.0p-1069",
636 Double.MIN_VALUE + Double.MIN_VALUE*32);
637 test("%.30a", "0x1.fffffffffffff00000000000000000p1023", Double.MAX_VALUE);
638 test("%.13a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
639 test("%.11a", "0x1.00000000000p1024", Double.MAX_VALUE);
640 test("%.1a", "0x1.0p1024", Double.MAX_VALUE);
641 test("%.11a", "0x1.18000000000p0", 0x1.18p0);
642 test("%.1a", "0x1.2p0", 0x1.18p0);
643
644 test("%.11a", "0x1.18000000000p0", 0x1.180000000001p0);
645 test("%.1a", "0x1.2p0", 0x1.180000000001p0);
646 test("%.11a", "0x1.28000000000p0", 0x1.28p0);
647 test("%.1a", "0x1.2p0", 0x1.28p0);
648
649 test("%.11a", "0x1.28000000000p0", 0x1.280000000001p0);
650 test("%.1a", "0x1.3p0", 0x1.280000000001p0);
651
652 test("%a", "0x0.123p-1022", 0x0.123p-1022);
653 test("%1.3a", "0x1.230p-1026", 0x0.123p-1022);
654 test("%1.12a", "0x1.230000000000p-1026", 0x0.123p-1022);
655 test("%1.15a", "0x0.123000000000000p-1022", 0x0.123p-1022);
656 test("%1.5a", "0x1.00000p-1074", 0x0.0000000000001p-1022);
657 test("%1.7a", "0x1.0000000p-1022", 0x0.fffffffffffffp-1022);
658
659 test("%1.6a", "0x1.230000p-1026", 0x0.123000057p-1022);
660 test("%1.7a", "0x1.2300005p-1026", 0x0.123000057p-1022);
661 test("%1.8a", "0x1.23000057p-1026", 0x0.123000057p-1022);
662 test("%1.9a", "0x1.230000570p-1026", 0x0.123000057p-1022);
663
664 test("%1.6a", "0x1.230000p-1026", 0x0.123000058p-1022);
665 test("%1.7a", "0x1.2300006p-1026", 0x0.123000058p-1022);
666 test("%1.8a", "0x1.23000058p-1026", 0x0.123000058p-1022);
667 test("%1.9a", "0x1.230000580p-1026", 0x0.123000058p-1022);
668
669 test("%1.6a", "0x1.230000p-1026", 0x0.123000059p-1022);
670 test("%1.7a", "0x1.2300006p-1026", 0x0.123000059p-1022);
671 test("%1.8a", "0x1.23000059p-1026", 0x0.123000059p-1022);
672 test("%1.9a", "0x1.230000590p-1026", 0x0.123000059p-1022);
673
674 test("%1.4a", "0x1.0000p-1022", Math.nextDown(Double.MIN_NORMAL));
675
676 test("%a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
677 test("%1.1a", "0x1.0p1024", Double.MAX_VALUE);
678 test("%1.2a", "0x1.00p1024", Double.MAX_VALUE);
679 test("%1.6a", "0x1.000000p1024", Double.MAX_VALUE);
680 test("%1.9a", "0x1.000000000p1024", Double.MAX_VALUE);
681 test("%1.11a", "0x1.00000000000p1024", Double.MAX_VALUE);
682 test("%1.12a", "0x1.000000000000p1024", Double.MAX_VALUE);
683 test("%1.13a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
684
685 //---------------------------------------------------------------------
686 // %f, %e, %g, %a - Boundaries
687 //---------------------------------------------------------------------
688
689 //---------------------------------------------------------------------
690 // %f, %e, %g, %a - Double.MIN_VALUE
691 //---------------------------------------------------------------------
692 test("%f", "0.000000", Double.MIN_VALUE);
693 test("%,f", "0.000000", Double.MIN_VALUE);
694 test("%(f", "(0.000000)", -Double.MIN_VALUE);
695 test("%30.0f", " 0", Double.MIN_VALUE);
696 test("%30.5f", " 0.00000", Double.MIN_VALUE);
697 test("%30.13f", " 0.0000000000000", Double.MIN_VALUE);
698 test("%30.20f", " 0.00000000000000000000", Double.MIN_VALUE);
699 test("%30.350f","0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000490000000000000000000000000",
700 Double.MIN_VALUE);
701 test("%e", "4.900000e-324", Double.MIN_VALUE);
702 test("%E", "4.900000E-324", Double.MIN_VALUE);
703 test("%(.1e", "4.9e-324", Double.MIN_VALUE);
704 test("%(E", "(4.900000E-324)", -Double.MIN_VALUE);
705 test("%30.5e", " 4.90000e-324", Double.MIN_VALUE);
706 test("%30.13e", " 4.9000000000000e-324", Double.MIN_VALUE);
707 test("%30.20e", " 4.90000000000000000000e-324", Double.MIN_VALUE);
732 test("%30.20f", "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00000000000000000000",
733 Double.MAX_VALUE);
734 test("%e", "1.797693e+308", Double.MAX_VALUE);
735 test("%E", "1.797693E+308", Double.MAX_VALUE);
736 test("%(e", "1.797693e+308", Double.MAX_VALUE);
737 test("%(e", "(1.797693e+308)", -Double.MAX_VALUE);
738 test("%30.5e", " 1.79769e+308", Double.MAX_VALUE);
739 test("%30.13e", " 1.7976931348623e+308", Double.MAX_VALUE);
740 test("%30.20e", " 1.79769313486231570000e+308", Double.MAX_VALUE);
741 test("%g", "1.79769e+308", Double.MAX_VALUE);
742 test("%G", "1.79769E+308", Double.MAX_VALUE);
743 test("%,g", "1.79769e+308", Double.MAX_VALUE);
744 test("%(g", "(1.79769e+308)", -Double.MAX_VALUE);
745 test("%30.5g", " 1.7977e+308", Double.MAX_VALUE);
746 test("%30.13g", " 1.797693134862e+308", Double.MAX_VALUE);
747 test("%30.20g", " 1.7976931348623157000e+308", Double.MAX_VALUE);
748 test("%a", "0x1.fffffffffffffp1023", Double.MAX_VALUE);
749 test("%A", "0X1.FFFFFFFFFFFFFP1023", Double.MAX_VALUE);
750 test("%30a", " 0x1.fffffffffffffp1023", Double.MAX_VALUE);
751
752 //---------------------------------------------------------------------
753 // %t
754 //
755 // Date/Time conversions applicable to Calendar, Date, and long.
756 //---------------------------------------------------------------------
757 test("%tA", "null", (Object)null);
758 test("%TA", "NULL", (Object)null);
759
760 //---------------------------------------------------------------------
761 // %t - errors
762 //---------------------------------------------------------------------
763 tryCatch("%t", UnknownFormatConversionException.class);
764 tryCatch("%T", UnknownFormatConversionException.class);
765 tryCatch("%tP", UnknownFormatConversionException.class);
766 tryCatch("%TP", UnknownFormatConversionException.class);
767 tryCatch("%.5tB", IllegalFormatPrecisionException.class);
768 tryCatch("%#tB", FormatFlagsConversionMismatchException.class);
769 tryCatch("%-tB", MissingFormatWidthException.class);
770
771 //---------------------------------------------------------------------
772 // %n
773 //---------------------------------------------------------------------
774 test("%n", System.getProperty("line.separator"), (Object)null);
775 test("%n", System.getProperty("line.separator"), "");
776
777 tryCatch("%,n", IllegalFormatFlagsException.class);
778 tryCatch("%.n", UnknownFormatConversionException.class);
779 tryCatch("%5.n", UnknownFormatConversionException.class);
780 tryCatch("%5n", IllegalFormatWidthException.class);
781 tryCatch("%.7n", IllegalFormatPrecisionException.class);
782 tryCatch("%<n", IllegalFormatFlagsException.class);
783
784 //---------------------------------------------------------------------
785 // %%
786 //---------------------------------------------------------------------
787 test("%%", "%", (Object)null);
788 test("%%", "%", "");
789 tryCatch("%%%", UnknownFormatConversionException.class);
|