| ... | ... | @@ -957,3 +957,161 @@ const POW5_INV_ERRORS: [154]u64 = .{ |
| 957 | 957 | }; |
| 958 | 958 | |
| 959 | 959 | // zig fmt: on |
| 960 | |
| 961 | fn check(comptime T: type, value: T, comptime expected: []const u8) !void { |
| 962 | var buf: [6000]u8 = undefined; |
| 963 | const s = try format(&buf, value, .{}); |
| 964 | try std.testing.expectEqualStrings(expected, s); |
| 965 | } |
| 966 | |
| 967 | test "format f32" { |
| 968 | try check(f32, 0.0, "0e0"); |
| 969 | try check(f32, -0.0, "-0e0"); |
| 970 | try check(f32, 1.0, "1e0"); |
| 971 | try check(f32, -1.0, "-1e0"); |
| 972 | try check(f32, std.math.nan(f32), "nan"); |
| 973 | try check(f32, std.math.inf(f32), "inf"); |
| 974 | try check(f32, -std.math.inf(f32), "-inf"); |
| 975 | try check(f32, 1.1754944e-38, "1.1754944e-38"); |
| 976 | try check(f32, @bitCast(@as(u32, 0x7f7fffff)), "3.4028235e38"); |
| 977 | try check(f32, @bitCast(@as(u32, 1)), "1e-45"); |
| 978 | try check(f32, 3.355445E7, "3.355445e7"); |
| 979 | try check(f32, 8.999999e9, "9e9"); |
| 980 | try check(f32, 3.4366717e10, "3.436672e10"); |
| 981 | try check(f32, 3.0540412e5, "3.0540412e5"); |
| 982 | try check(f32, 8.0990312e3, "8.0990312e3"); |
| 983 | try check(f32, 2.4414062e-4, "2.4414062e-4"); |
| 984 | try check(f32, 2.4414062e-3, "2.4414062e-3"); |
| 985 | try check(f32, 4.3945312e-3, "4.3945312e-3"); |
| 986 | try check(f32, 6.3476562e-3, "6.3476562e-3"); |
| 987 | try check(f32, 4.7223665e21, "4.7223665e21"); |
| 988 | try check(f32, 8388608.0, "8.388608e6"); |
| 989 | try check(f32, 1.6777216e7, "1.6777216e7"); |
| 990 | try check(f32, 3.3554436e7, "3.3554436e7"); |
| 991 | try check(f32, 6.7131496e7, "6.7131496e7"); |
| 992 | try check(f32, 1.9310392e-38, "1.9310392e-38"); |
| 993 | try check(f32, -2.47e-43, "-2.47e-43"); |
| 994 | try check(f32, 1.993244e-38, "1.993244e-38"); |
| 995 | try check(f32, 4103.9003, "4.1039004e3"); |
| 996 | try check(f32, 5.3399997e9, "5.3399997e9"); |
| 997 | try check(f32, 6.0898e-39, "6.0898e-39"); |
| 998 | try check(f32, 0.0010310042, "1.0310042e-3"); |
| 999 | try check(f32, 2.8823261e17, "2.882326e17"); |
| 1000 | try check(f32, 7.038531e-26, "7.038531e-26"); |
| 1001 | try check(f32, 9.2234038e17, "9.223404e17"); |
| 1002 | try check(f32, 6.7108872e7, "6.710887e7"); |
| 1003 | try check(f32, 1.0e-44, "1e-44"); |
| 1004 | try check(f32, 2.816025e14, "2.816025e14"); |
| 1005 | try check(f32, 9.223372e18, "9.223372e18"); |
| 1006 | try check(f32, 1.5846085e29, "1.5846086e29"); |
| 1007 | try check(f32, 1.1811161e19, "1.1811161e19"); |
| 1008 | try check(f32, 5.368709e18, "5.368709e18"); |
| 1009 | try check(f32, 4.6143165e18, "4.6143166e18"); |
| 1010 | try check(f32, 0.007812537, "7.812537e-3"); |
| 1011 | try check(f32, 1.4e-45, "1e-45"); |
| 1012 | try check(f32, 1.18697724e20, "1.18697725e20"); |
| 1013 | try check(f32, 1.00014165e-36, "1.00014165e-36"); |
| 1014 | try check(f32, 200.0, "2e2"); |
| 1015 | try check(f32, 3.3554432e7, "3.3554432e7"); |
| 1016 | |
| 1017 | try check(f32, 1.0, "1e0"); |
| 1018 | try check(f32, 1.2, "1.2e0"); |
| 1019 | try check(f32, 1.23, "1.23e0"); |
| 1020 | try check(f32, 1.234, "1.234e0"); |
| 1021 | try check(f32, 1.2345, "1.2345e0"); |
| 1022 | try check(f32, 1.23456, "1.23456e0"); |
| 1023 | try check(f32, 1.234567, "1.234567e0"); |
| 1024 | try check(f32, 1.2345678, "1.2345678e0"); |
| 1025 | try check(f32, 1.23456735e-36, "1.23456735e-36"); |
| 1026 | } |
| 1027 | |
| 1028 | test "format f64" { |
| 1029 | try check(f64, 0.0, "0e0"); |
| 1030 | try check(f64, -0.0, "-0e0"); |
| 1031 | try check(f64, 1.0, "1e0"); |
| 1032 | try check(f64, -1.0, "-1e0"); |
| 1033 | try check(f64, std.math.nan(f64), "nan"); |
| 1034 | try check(f64, std.math.inf(f64), "inf"); |
| 1035 | try check(f64, -std.math.inf(f64), "-inf"); |
| 1036 | try check(f64, 2.2250738585072014e-308, "2.2250738585072014e-308"); |
| 1037 | try check(f64, @bitCast(@as(u64, 0x7fefffffffffffff)), "1.7976931348623157e308"); |
| 1038 | try check(f64, @bitCast(@as(u64, 1)), "5e-324"); |
| 1039 | try check(f64, 2.98023223876953125e-8, "2.9802322387695312e-8"); |
| 1040 | try check(f64, -2.109808898695963e16, "-2.109808898695963e16"); |
| 1041 | try check(f64, 4.940656e-318, "4.940656e-318"); |
| 1042 | try check(f64, 1.18575755e-316, "1.18575755e-316"); |
| 1043 | try check(f64, 2.989102097996e-312, "2.989102097996e-312"); |
| 1044 | try check(f64, 9.0608011534336e15, "9.0608011534336e15"); |
| 1045 | try check(f64, 4.708356024711512e18, "4.708356024711512e18"); |
| 1046 | try check(f64, 9.409340012568248e18, "9.409340012568248e18"); |
| 1047 | try check(f64, 1.2345678, "1.2345678e0"); |
| 1048 | try check(f64, @bitCast(@as(u64, 0x4830f0cf064dd592)), "5.764607523034235e39"); |
| 1049 | try check(f64, @bitCast(@as(u64, 0x4840f0cf064dd592)), "1.152921504606847e40"); |
| 1050 | try check(f64, @bitCast(@as(u64, 0x4850f0cf064dd592)), "2.305843009213694e40"); |
| 1051 | |
| 1052 | try check(f64, 1, "1e0"); |
| 1053 | try check(f64, 1.2, "1.2e0"); |
| 1054 | try check(f64, 1.23, "1.23e0"); |
| 1055 | try check(f64, 1.234, "1.234e0"); |
| 1056 | try check(f64, 1.2345, "1.2345e0"); |
| 1057 | try check(f64, 1.23456, "1.23456e0"); |
| 1058 | try check(f64, 1.234567, "1.234567e0"); |
| 1059 | try check(f64, 1.2345678, "1.2345678e0"); |
| 1060 | try check(f64, 1.23456789, "1.23456789e0"); |
| 1061 | try check(f64, 1.234567895, "1.234567895e0"); |
| 1062 | try check(f64, 1.2345678901, "1.2345678901e0"); |
| 1063 | try check(f64, 1.23456789012, "1.23456789012e0"); |
| 1064 | try check(f64, 1.234567890123, "1.234567890123e0"); |
| 1065 | try check(f64, 1.2345678901234, "1.2345678901234e0"); |
| 1066 | try check(f64, 1.23456789012345, "1.23456789012345e0"); |
| 1067 | try check(f64, 1.234567890123456, "1.234567890123456e0"); |
| 1068 | try check(f64, 1.2345678901234567, "1.2345678901234567e0"); |
| 1069 | |
| 1070 | try check(f64, 4.294967294, "4.294967294e0"); |
| 1071 | try check(f64, 4.294967295, "4.294967295e0"); |
| 1072 | try check(f64, 4.294967296, "4.294967296e0"); |
| 1073 | try check(f64, 4.294967297, "4.294967297e0"); |
| 1074 | try check(f64, 4.294967298, "4.294967298e0"); |
| 1075 | } |
| 1076 | |
| 1077 | test "format f80" { |
| 1078 | try check(f80, 0.0, "0e0"); |
| 1079 | try check(f80, -0.0, "-0e0"); |
| 1080 | try check(f80, 1.0, "1e0"); |
| 1081 | try check(f80, -1.0, "-1e0"); |
| 1082 | try check(f80, std.math.nan(f80), "nan"); |
| 1083 | try check(f80, std.math.inf(f80), "inf"); |
| 1084 | try check(f80, -std.math.inf(f80), "-inf"); |
| 1085 | |
| 1086 | try check(f80, 2.2250738585072014e-308, "2.2250738585072014e-308"); |
| 1087 | try check(f80, 2.98023223876953125e-8, "2.98023223876953125e-8"); |
| 1088 | try check(f80, -2.109808898695963e16, "-2.109808898695963e16"); |
| 1089 | try check(f80, 4.940656e-318, "4.940656e-318"); |
| 1090 | try check(f80, 1.18575755e-316, "1.18575755e-316"); |
| 1091 | try check(f80, 2.989102097996e-312, "2.989102097996e-312"); |
| 1092 | try check(f80, 9.0608011534336e15, "9.0608011534336e15"); |
| 1093 | try check(f80, 4.708356024711512e18, "4.708356024711512e18"); |
| 1094 | try check(f80, 9.409340012568248e18, "9.409340012568248e18"); |
| 1095 | try check(f80, 1.2345678, "1.2345678e0"); |
| 1096 | } |
| 1097 | |
| 1098 | test "format f128" { |
| 1099 | try check(f128, 0.0, "0e0"); |
| 1100 | try check(f128, -0.0, "-0e0"); |
| 1101 | try check(f128, 1.0, "1e0"); |
| 1102 | try check(f128, -1.0, "-1e0"); |
| 1103 | try check(f128, std.math.nan(f128), "nan"); |
| 1104 | try check(f128, std.math.inf(f128), "inf"); |
| 1105 | try check(f128, -std.math.inf(f128), "-inf"); |
| 1106 | |
| 1107 | try check(f128, 2.2250738585072014e-308, "2.2250738585072014e-308"); |
| 1108 | try check(f128, 2.98023223876953125e-8, "2.98023223876953125e-8"); |
| 1109 | try check(f128, -2.109808898695963e16, "-2.109808898695963e16"); |
| 1110 | try check(f128, 4.940656e-318, "4.940656e-318"); |
| 1111 | try check(f128, 1.18575755e-316, "1.18575755e-316"); |
| 1112 | try check(f128, 2.989102097996e-312, "2.989102097996e-312"); |
| 1113 | try check(f128, 9.0608011534336e15, "9.0608011534336e15"); |
| 1114 | try check(f128, 4.708356024711512e18, "4.708356024711512e18"); |
| 1115 | try check(f128, 9.409340012568248e18, "9.409340012568248e18"); |
| 1116 | try check(f128, 1.2345678, "1.2345678e0"); |
| 1117 | } |