authorgravatar for marc@tiehu.isMarc Tiehuis <marc@tiehu.is> 2024-03-09 16:26:10+13:00
committergravatar for marc@tiehu.isMarc Tiehuis <marc@tiehu.is> 2024-03-09 16:26:10+13:00
log04fd113e226c82da9aa8e4ca7d63dd8ca1e453b2
tree6526494f6014ad3c28c47ac2a342b5d6b23b0de2
parentc6ad551cd2fb19ef7ee2f7945d248284deba54e1

std.fmt: add ryu upstream unit tests


1 files changed, 158 insertions(+), 0 deletions(-)

lib/std/fmt/ryu128.zig+158
...@@ -957,3 +957,161 @@ const POW5_INV_ERRORS: [154]u64 = .{...@@ -957,3 +957,161 @@ const POW5_INV_ERRORS: [154]u64 = .{
957};957};
958958
959// zig fmt: on959// zig fmt: on
960
961fn 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
967test "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
1028test "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
1077test "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
1098test "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}