use crate::{MqChar, types};
type CcsidEntry = (i32, u8, &'static str);
const CCSID: &[CcsidEntry] = &[
(37, 1, "IBM-037"),
(256, 1, "IBM-256"),
(273, 1, "IBM-273"),
(277, 1, "IBM-277"),
(278, 1, "IBM-278"),
(280, 1, "IBM-280"),
(284, 1, "IBM-284"),
(285, 1, "IBM-285"),
(286, 1, "IBM-286"),
(290, 1, "IBM-290"),
(297, 1, "IBM-297"),
(300, 1, "IBM-300"),
(301, 2, "IBM-301"),
(367, 3, "IBM-367"),
(420, 1, "IBM-420"),
(421, 1, "IBM-421"),
(424, 1, "IBM-424"),
(425, 1, "IBM-425"),
(437, 2, "IBM-437"),
(500, 1, "IBM-500"),
(720, 2, "IBM-720"),
(737, 2, "IBM-737"),
(775, 2, "IBM-775"),
(803, 1, "IBM-803"),
(806, 2, "IBM-806"),
(813, 3, "ISO-8859-7"),
(819, 3, "ANSI_X3.4-1968"),
(819, 3, "ISO-8859-1"),
(833, 1, "IBM-833"),
(834, 1, "IBM-834"),
(835, 1, "IBM-835"),
(836, 1, "IBM-836"),
(837, 1, "IBM-837"),
(838, 1, "IBM-838"),
(850, 2, "IBM-850"),
(852, 2, "IBM-852"),
(853, 2, "IBM-853"),
(855, 2, "IBM-855"),
(856, 2, "IBM-856"),
(857, 2, "IBM-857"),
(858, 2, "IBM-858"),
(860, 2, "IBM-860"),
(861, 2, "IBM-861"),
(862, 2, "IBM-860"),
(863, 2, "IBM-863"),
(864, 2, "IBM-864"),
(865, 2, "IBM-865"),
(866, 2, "IBM-866"),
(867, 2, "IBM-867"),
(868, 2, "IBM-868"),
(869, 2, "IBM-869"),
(870, 1, "IBM-870"),
(871, 1, "IBM-871"),
(874, 2, "TIS-620"),
(875, 1, "IBM-875"),
(878, 3, "KOI8-R"),
(880, 1, "IBM-880"),
(891, 2, "IBM-891"),
(895, 3, "IBM-895"),
(897, 2, "IBM-897"),
(901, 3, "IBM-901"),
(902, 3, "IBM-902"),
(903, 2, "IBM-903"),
(904, 2, "IBM-904"),
(912, 3, "ISO-8859-2"),
(913, 3, "ISO-8859-3"),
(915, 3, "ISO-8859-5"),
(916, 3, "ISO-8859-8"),
(918, 1, "IBM-918"),
(920, 3, "ISO-8859-9"),
(921, 3, "ISO-8859-13"),
(922, 3, "IBM-922"),
(923, 3, "ISO-8859-15"),
(924, 1, "IBM-924"),
(926, 2, "IBM-926"),
(927, 2, "IBM-927"),
(928, 2, "IBM-928"),
(930, 1, "IBM-930"),
(931, 1, "IBM-931"),
(932, 2, "IBM-932"),
(933, 1, "IBM-933"),
(935, 1, "IBM-935"),
(936, 2, "IBM-936"),
(937, 1, "IBM-937"),
(938, 2, "IBM-938"),
(939, 1, "IBM-939"),
(941, 2, "IBM-941"),
(942, 2, "IBM-942"),
(943, 2, "PCK"),
(943, 2, "SHIFT_JIS"),
(947, 2, "IBM-947"),
(948, 2, "IBM-948"),
(949, 2, "IBM-949"),
(950, 2, "BIG5"),
(950, 2, "BIG5-HKSCS"),
(950, 2, "BIG5HKSCS"),
(951, 2, "IBM-951"),
(954, 6, "EUC-JP"),
(964, 6, "EUC-TW"),
(970, 6, "EUC-KR"),
(1006, 3, "IBM-1006"),
(1010, 3, "IBM-1010"),
(1011, 3, "IBM-1011"),
(1012, 3, "IBM-1012"),
(1013, 3, "IBM-1013"),
(1014, 3, "IBM-1014"),
(1015, 3, "IBM-1015"),
(1016, 3, "IBM-1016"),
(1017, 3, "IBM-1017"),
(1018, 3, "IBM-1018"),
(1019, 3, "IBM-1019"),
(1025, 1, "IBM-1025"),
(1026, 1, "IBM-1026"),
(1027, 1, "IBM-1027"),
(1040, 2, "IBM-1040"),
(1041, 2, "IBM-1041"),
(1042, 2, "IBM-1042"),
(1043, 2, "IBM-1043"),
(1046, 2, "IBM-1046"),
(1047, 1, "IBM-1047"),
(1051, 3, "IBM-1051"),
(1088, 2, "IBM-1088"),
(1089, 3, "ISO-8859-6"),
(1097, 1, "IBM-1097"),
(1098, 2, "IBM-1098"),
(1112, 1, "IBM-1112"),
(1114, 2, "IBM-1114"),
(1115, 2, "IBM-1115"),
(1122, 1, "IBM-1122"),
(1123, 1, "IBM-1123"),
(1124, 3, "IBM-1124"),
(1125, 2, "IBM-1125"),
(1127, 2, "IBM-1127"),
(1129, 3, "IBM-1129"),
(1130, 1, "IBM-1130"),
(1131, 2, "IBM-1131"),
(1132, 1, "IBM-1132"),
(1133, 3, "IBM-1133"),
(1137, 1, "IBM-1137"),
(1140, 1, "IBM-1140"),
(1141, 1, "IBM-1141"),
(1142, 1, "IBM-1142"),
(1143, 1, "IBM-1143"),
(1144, 1, "IBM-1144"),
(1145, 1, "IBM-1145"),
(1146, 1, "IBM-1146"),
(1147, 1, "IBM-1147"),
(1148, 1, "IBM-1148"),
(1149, 1, "IBM-1149"),
(1153, 1, "IBM-1153"),
(1156, 1, "IBM-1156"),
(1157, 1, "IBM-1157"),
(1159, 1, "IBM-1159"),
(1200, 4, "UCS-2"),
(1208, 5, "UTF-8"),
(1250, 2, "IBM-1250"),
(1251, 2, "CP1251"),
(1252, 2, "IBM-1252"),
(1253, 2, "IBM-1253"),
(1254, 2, "IBM-1254"),
(1255, 2, "CP1255"),
(1256, 2, "IBM-1256"),
(1257, 2, "IBM-1257"),
(1258, 2, "IBM-1258"),
(1275, 2, "IBM-1275"),
(1279, 1, "IBM-1279"),
(1280, 2, "IBM-1280"),
(1281, 2, "IBM-1281"),
(1282, 2, "IBM-1282"),
(1283, 2, "IBM-1283"),
(1284, 2, "IBM-1284"),
(1285, 2, "IBM-1285"),
(1350, 6, "JISeucJP"),
(1351, 2, "IBM-1351"),
(1362, 2, "IBM-1362"),
(1363, 2, "IBM-1363"),
(1364, 1, "IBM-1364"),
(1370, 2, "IBM-1370"),
(1371, 1, "IBM-1371"),
(1380, 2, "IBM-1380"),
(1381, 2, "GB2312"),
(1383, 6, "EUC-CN"),
(1385, 2, "IBM-1385"),
(1386, 2, "GBK"),
(1388, 1, "IBM-1388"),
(1390, 1, "IBM-1390"),
(1392, 7, "GB18030"),
(1399, 1, "IBM-1399"),
(4133, 1, "IBM-037"),
(4325, 1, "IBM-256"),
(4369, 1, "IBM-273"),
(4370, 1, "IBM-4370"),
(4371, 1, "IBM-4371"),
(4372, 1, "IBM-4372"),
(4373, 1, "IBM-277"),
(4374, 1, "IBM-278"),
(4376, 1, "IBM-280"),
(4378, 1, "IBM-4378"),
(4380, 1, "IBM-284"),
(4381, 1, "IBM-285"),
(4386, 1, "IBM-290"),
(4393, 1, "IBM-297"),
(4396, 1, "IBM-300"),
(4397, 2, "IBM-301"),
(4516, 1, "IBM-420"),
(4520, 1, "IBM-424"),
(4533, 2, "IBM-437"),
(4596, 1, "IBM-500"),
(4899, 1, "IBM-4899"),
(4909, 3, "ISO-8859-7@euro"),
(4929, 1, "IBM-833"),
(4931, 1, "IBM-835"),
(4932, 1, "IBM-836"),
(4933, 1, "IBM-4933"),
(4934, 1, "IBM-838"),
(4946, 2, "IBM-850"),
(4948, 2, "IBM-852"),
(4949, 2, "IBM-853"),
(4951, 2, "IBM-855"),
(4952, 2, "IBM-856"),
(4953, 2, "IBM-857"),
(4960, 2, "IBM-864"),
(4964, 2, "IBM-868"),
(4965, 2, "IBM-869"),
(4966, 1, "IBM-870"),
(4967, 1, "IBM-871"),
(4970, 2, "TIS-620"),
(4971, 1, "IBM-4971"),
(4976, 1, "IBM-880"),
(4993, 2, "IBM-897"),
(5014, 1, "IBM-918"),
(5023, 2, "IBM-927"),
(5026, 1, "IBM-930"),
(5028, 2, "IBM-932"),
(5029, 1, "IBM-933"),
(5031, 1, "IBM-935"),
(5033, 1, "IBM-937"),
(5035, 1, "IBM-939"),
(5039, 2, "IBM-5039"),
(5039, 2, "IBM-5039"),
(5045, 2, "IBM-949"),
(5046, 2, "BIG5"),
(5047, 2, "IBM-951"),
(5050, 6, "EUC-JP"),
(5060, 6, "EUC-TW"),
(5066, 6, "EUC-KR"),
(5123, 1, "IBM-5123"),
(5137, 2, "IBM-1041"),
(5142, 2, "IBM-1046"),
(5143, 1, "IBM-1047"),
(5210, 2, "IBM-5210"),
(5211, 2, "IBM-1115"),
(5346, 2, "IBM-5346"),
(5347, 2, "IBM-5347"),
(5348, 2, "IBM-5348"),
(5349, 2, "IBM-5349"),
(5350, 2, "IBM-5350"),
(5351, 2, "IBM-5351"),
(5352, 2, "IBM-5352"),
(5353, 2, "IBM-5353"),
(5354, 2, "IBM-5354"),
(5476, 2, "IBM-1380"),
(5477, 2, "GB2312"),
(5479, 6, "EUC-CN"),
(5481, 2, "IBM-1385"),
(5482, 2, "GBK"),
(5484, 1, "IBM-1388"),
(5488, 7, "GB18030"),
(8229, 1, "IBM-037"),
(8448, 1, "IBM-256"),
(8478, 1, "IBM-284"),
(8482, 1, "IBM-8482"),
(8489, 1, "IBM-297"),
(8492, 1, "IBM-300"),
(8493, 2, "IBM-301"),
(8612, 1, "IBM-8612"),
(8629, 2, "IBM-437"),
(8692, 1, "IBM-500"),
(9025, 1, "IBM-833"),
(9026, 1, "IBM-834"),
(9027, 1, "IBM-9027"),
(9028, 1, "IBM-836"),
(9030, 1, "IBM-838"),
(9044, 2, "IBM-9044"),
(9047, 2, "IBM-855"),
(9048, 2, "IBM-9048"),
(9056, 2, "IBM-864"),
(9060, 2, "IBM-868"),
(9061, 2, "IBM-9061"),
(9066, 2, "TIS-620"),
(9089, 2, "IBM-897"),
(9122, 1, "IBM-930"),
(9124, 2, "IBM-932"),
(9125, 1, "IBM-933"),
(9127, 1, "IBM-935"),
(9131, 1, "IBM-939"),
(9142, 2, "BIG5"),
(9146, 6, "EUC-JP"),
(9449, 2, "IBM-9449"),
(9572, 2, "IBM-1380"),
(12325, 1, "IBM-037"),
(12544, 1, "IBM-256"),
(12588, 1, "IBM-300"),
(12712, 1, "IBM-12712"),
(12725, 2, "IBM-437"),
(12788, 1, "IBM-500"),
(13152, 2, "IBM-864"),
(13218, 1, "IBM-930"),
(13219, 1, "IBM-931"),
(13221, 1, "IBM-933"),
(13223, 1, "IBM-935"),
(13238, 2, "BIG5"),
(13242, 6, "EUC-JP"),
(13488, 4, "UCS-2"),
(16421, 1, "IBM-037"),
(16684, 1, "IBM-16684"),
(16821, 2, "IBM-437"),
(16884, 1, "IBM-500"),
(17314, 1, "IBM-930"),
(17584, 4, "UCS-2"),
(20517, 1, "IBM-037"),
(20917, 2, "IBM-437"),
(20980, 1, "IBM-500"),
(21427, 2, "IBM-21427"),
(24613, 1, "IBM-037"),
(25076, 1, "IBM-500"),
(29172, 1, "IBM-500"),
(32805, 1, "IBM-037"),
(33058, 1, "IBM-290"),
(33268, 1, "IBM-500"),
(33618, 2, "IBM-850"),
(33698, 1, "IBM-930"),
(33699, 1, "IBM-931"),
(33722, 6, "EUC-JP"),
(37364, 1, "IBM-500"),
(41460, 1, "IBM-500"),
(45556, 1, "IBM-500"),
(49652, 1, "IBM-500"),
(53748, 1, "IBM-500"),
(61696, 1, "IBM-500"),
(61697, 2, "IBM-850"),
(61698, 2, "IBM-850"),
(61699, 3, "ISO-8859-1"),
(61710, 3, "ISO-8859-1"),
(61711, 1, "IBM-500"),
(61712, 1, "IBM-500"),
];
const ASCII7_EBCDIC: [u8; 256] = [
0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, 0x16, 0x05, 0x25, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F, 0x40, 0x4F, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0x4A, 0xE0, 0x5A, 0x5F, 0x6D, 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xC0, 0x6A, 0xD0, 0xA1, 0x07, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, ];
const EBCDIC_ASCII7: [u8; 256] = [
0x00, 0x01, 0x02, 0x03, 0x1A, 0x09, 0x1A, 0x7F, 0x1A, 0x1A, 0x1A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x1A, 0x1A, 0x08, 0x1A, 0x18, 0x19, 0x1A, 0x1A, 0x1C, 0x1D, 0x1E, 0x1F, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x0A, 0x17, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x05, 0x06, 0x07, 0x1A, 0x1A, 0x16, 0x1A, 0x1A, 0x1A, 0x1A, 0x04, 0x1A, 0x1A, 0x1A, 0x1A, 0x14, 0x15, 0x1A, 0x1A, 0x20, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x5B, 0x2E, 0x3C, 0x28, 0x2B, 0x21, 0x26, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E, 0x2D, 0x2F, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, 0x1A, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x5C, 0x1A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, ];
static CCSID_2K: [CcsidEntry; 2048] = ccsid_lookup_init();
const fn convert<const N: usize>(input: &MqChar<N>, table: &[u8; 256]) -> MqChar<N> {
let mut result = [0; N];
let mut i = 0;
#[expect(
clippy::cast_possible_wrap,
clippy::cast_sign_loss,
reason = "Treating MQCHAR as always positive is desired here"
)]
while i < N {
result[i] = table[input[i] as u8 as usize] as types::MQCHAR;
i += 1;
}
result
}
#[must_use]
#[inline]
pub const fn ebcdic_ascii7<const N: usize>(ebcdic: &MqChar<N>) -> MqChar<N> {
convert(ebcdic, &EBCDIC_ASCII7)
}
#[must_use]
#[inline]
pub const fn ascii7_ebcdic<const N: usize>(ascii: &MqChar<N>) -> MqChar<N> {
convert(ascii, &ASCII7_EBCDIC)
}
const fn ccsid_lookup_init<const N: usize>() -> [(i32, u8, &'static str); N] {
let mut i = 0;
let mut result = [(0, 0, ""); N];
while i < CCSID.len() {
let entry @ (ccsid, ..) = CCSID[i];
#[expect(clippy::cast_sign_loss)]
let uccsid = ccsid as usize;
if uccsid < N {
result[uccsid] = entry;
}
i += 1;
}
result
}
#[must_use]
pub fn ccsid_lookup(ccsid: u32) -> Option<&'static CcsidEntry> {
if ccsid < 2048 {
Some(&CCSID_2K[ccsid as usize]).filter(|(ccsid, ..)| *ccsid != 0)
} else {
#[expect(clippy::cast_sign_loss)]
CCSID
.binary_search_by_key(&ccsid, |(ccsid_entry, ..)| *ccsid_entry as u32)
.map(|index| &CCSID[index])
.ok()
}
}
#[cfg(test)]
#[cfg_attr(coverage_nightly, coverage(off))]
mod tests {
use super::EBCDIC_ASCII7;
use crate::encoding::{ASCII7_EBCDIC, ccsid_lookup};
#[test]
fn ccsid_lookup_all() {
assert!(ccsid_lookup(1).is_none());
assert!(ccsid_lookup(3000).is_none());
assert!(ccsid_lookup(37).is_some_and(|(.., name)| *name == "IBM-037"));
assert!(ccsid_lookup(8612).is_some_and(|(.., name)| *name == "IBM-8612"));
}
#[test]
fn ebcdic_ascii_roundtrip() {
let mismatch: Vec<_> = (0..=255u8)
.filter_map(|ebcdic| {
let ascii = EBCDIC_ASCII7[ebcdic as usize];
let ebcdic_round = ASCII7_EBCDIC[ascii as usize];
if (ebcdic_round == 0x3F && ascii == 0x1A) || ebcdic == ebcdic_round {
None
} else {
Some((ebcdic, ascii, ebcdic_round))
}
})
.collect();
assert_eq!(mismatch, []);
}
#[test]
fn ascii_ebcdic_roundtrip() {
let mismatch: Vec<_> = (0..=255u8)
.filter_map(|ascii| {
let ebcdic = ASCII7_EBCDIC[ascii as usize];
let ascii_round = EBCDIC_ASCII7[ebcdic as usize];
if (ascii_round == 0x1A && ebcdic == 0x3F) || ascii == ascii_round {
None
} else {
Some((ascii, ebcdic, ascii_round))
}
})
.collect();
assert_eq!(mismatch, []);
}
}
#[cfg(test)]
mod ptest {
use proptest::prelude::*;
use super::*;
proptest! {
#[test]
#[allow(clippy::cast_possible_wrap)]
fn ccsid_lookup_proptest(ccsid in 0..4096u32) {
if let Some((ccsid_result, ..)) = ccsid_lookup(ccsid) {
prop_assert_eq!(*ccsid_result, ccsid as types::MQLONG);
}
}
#[test]
fn ascii_ebcdic_roundtrip(ch in any::<MqChar<128>>()) {
let result = convert(&convert(&ch, &ASCII7_EBCDIC), &EBCDIC_ASCII7);
for (orig, round) in ch.iter().copied().zip(result) {
prop_assert!(orig == round || round == 0x1A);
}
}
#[test]
fn ebcdic_ascii_roundtrip(ch in any::<MqChar<128>>()) {
let result = convert(&convert(&ch, &EBCDIC_ASCII7), &ASCII7_EBCDIC);
for (orig, round) in ch.iter().copied().zip(result) {
prop_assert!(orig == round || round == 0x3F);
}
}
}
}