#![cfg(not(feature = "no-stdlib"))]
extern crate alloc_no_stdlib as alloc;
extern crate core;
extern crate lepton_mux as mux;
use alloc::{Allocator, HeapAlloc, SliceWrapper, SliceWrapperMut};
use mux::{StreamMuxer, StreamDemuxer};
use std::vec::Vec;
fn help_test_mux(
i0: &[u8],
i1: &[u8],
copy_pattern: &[(mux::StreamID, usize)],
in_buf_size: usize,
out_buf_size: usize,
) {
let mut m8 = HeapAlloc::<u8>::new(0);
let mut v = Vec::<u8>::new();
let mut mux = mux::Mux::<HeapAlloc<u8>>::default();
let mut buf = m8.alloc_cell(in_buf_size);
let mut input = [i0, i1];
for (index, copy) in copy_pattern.iter().enumerate() {
let sl = input[usize::from(copy.0)];
if sl.len() < copy.1 {
eprint!(
"Copy pattern {} beyond index: {} < {}\n",
index,
sl.len(),
copy.1
);
assert!(false);
}
let (to_copy, rem) = sl.split_at(copy.1);
input[usize::from(copy.0)] = rem;
mux.push_data(copy.0, to_copy, &mut m8);
let amt = mux.serialize(buf.slice_mut());
if amt != 0 {
v.extend(buf.slice().split_at(amt).0);
}
}
loop {
let amt = mux.flush(buf.slice_mut());
if amt == 0 {
break;
}
v.extend(buf.slice().split_at(amt).0);
}
assert_eq!(mux.is_eof(), true);
assert_eq!(&v[v.len() - 3..], &mux::EOF_MARKER[..]);
m8.free_cell(buf);
buf = m8.alloc_cell(out_buf_size);
input = [i0, i1];
mux = mux::Mux::<HeapAlloc<u8>>::default();
let mut dv = &v[..];
loop {
let actually_deserialized =
mux.deserialize(&dv[..core::cmp::min(out_buf_size, dv.len())], &mut m8);
dv = &dv[actually_deserialized..];
for stream_id in 0..input.len() {
let to_match_len;
{
let to_match = mux.data(stream_id as u8);
to_match_len = to_match.len();
let (checkme, rem) = input[stream_id].split_at(to_match.len());
assert_eq!(to_match, checkme);
input[stream_id] = rem;
}
mux.consume_data(stream_id as u8, to_match_len);
}
if dv.len() == 0 {
break;
}
}
m8.free_cell(buf);
assert_eq!(input, [&[], &[]]);
assert_eq!(mux.is_eof(), true);
mux.free(&mut m8);
}
fn rand(size: usize, mut seed: u32) -> Vec<u8> {
let mut ret = vec![seed as u8; size];
for (_index, val) in ret.iter_mut().enumerate() {
seed = seed.wrapping_add(159871);
*val = seed as u8;
}
ret
}
#[test]
fn test_real_mux() {
help_test_mux(
&rand(27657, 1)[..],
&rand(27797, 2)[..],
&[(0, 8189), (1, 8189), (1, 17996), (0, 19468), (1, 1612)],
4096,
4096,
);
}
#[test]
fn test_tiny_mux() {
help_test_mux(
&rand(8189, 1)[..],
&rand(8189, 2)[..],
&[(0, 8189), (1, 8189)],
4096,
4096,
);
}
#[test]
fn test_nano_mux() {
help_test_mux(
&rand(1, 1)[..],
&rand(1, 2)[..],
&[(0, 1), (1, 1)],
4096,
4096,
);
}
#[test]
fn test_interleaved_mux() {
help_test_mux(
&rand(1000000, 1)[..],
&rand(1000000, 2)[..],
&[
(0, 1),
(0, 1000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(1, 999986),
(0, 868986),
],
373,
3021,
);
}
#[test]
fn test_med_mux() {
help_test_mux(
&rand(188254, 13)[..],
&rand(36916, 17)[..],
&[
(0, 1886),
(0, 1670),
(0, 1352),
(0, 192),
(0, 2415),
(0, 3644),
(0, 1451),
(0, 3814),
(0, 2779),
(0, 1269),
(0, 3567),
(0, 2283),
(0, 3782),
(0, 2491),
(0, 875),
(0, 1494),
(0, 1079),
(0, 1298),
(0, 417),
(0, 1534),
(0, 1974),
(0, 3166),
(0, 2088),
(0, 1952),
(0, 3460),
(0, 2317),
(0, 4009),
(0, 3880),
(0, 1221),
(0, 504),
(0, 1016),
(0, 438),
(0, 3946),
(0, 2087),
(0, 3101),
(0, 2626),
(0, 676),
(0, 1962),
(0, 391),
(0, 3378),
(0, 3576),
(0, 1107),
(0, 1285),
(0, 3756),
(0, 3444),
(0, 948),
(0, 960),
(0, 2267),
(0, 764),
(0, 3181),
(0, 812),
(0, 3959),
(0, 536),
(0, 1479),
(0, 3270),
(0, 2507),
(0, 3558),
(0, 1631),
(0, 1075),
(1, 1356),
(0, 119),
(0, 379),
(0, 3945),
(0, 4055),
(0, 897),
(0, 2712),
(0, 2618),
(0, 1566),
(0, 300),
(0, 3236),
(0, 1030),
(0, 3793),
(0, 3686),
(0, 4008),
(0, 2646),
(0, 2097),
(0, 2539),
(0, 1658),
(0, 2005),
(0, 306),
(0, 304),
(0, 1529),
(0, 2716),
(0, 2477),
(0, 2826),
(0, 1019),
(0, 113),
(0, 3095),
(0, 3249),
(0, 2959),
(0, 773),
(1, 2974),
(1, 1406),
(1, 2660),
(1, 41),
(1, 1),
(1, 299),
(1, 2111),
(1, 2186),
(1, 3221),
(1, 2982),
(1, 3172),
(1, 863),
(1, 3141),
(1, 2083),
(1, 3693),
(1, 1650),
(1, 1183),
(1, 338),
(1, 1556),
],
257,
127,
);
}
#[test]
fn test_3meg_mux() {
help_test_mux(
&rand(3582012, 13)[..],
&rand(108475, 17)[..],
&[
(0, 7024),
(0, 2543),
(0, 23),
(0, 8063),
(0, 5761),
(0, 7689),
(0, 7667),
(0, 1145),
(0, 572),
(0, 7430),
(0, 3991),
(0, 5869),
(0, 885),
(0, 5504),
(0, 7719),
(0, 4220),
(0, 409),
(0, 4101),
(0, 3767),
(0, 2378),
(0, 6495),
(0, 2476),
(0, 4906),
(0, 256),
(0, 3028),
(0, 3294),
(0, 5728),
(0, 8032),
(0, 8067),
(0, 2862),
(0, 3026),
(0, 1325),
(0, 5548),
(0, 4154),
(0, 576),
(0, 3304),
(0, 3771),
(0, 4101),
(0, 6526),
(0, 2466),
(0, 7911),
(0, 6700),
(0, 3075),
(0, 3278),
(0, 2905),
(0, 1183),
(0, 4079),
(0, 3761),
(0, 6605),
(0, 5199),
(0, 6376),
(0, 4645),
(0, 5567),
(0, 7065),
(0, 7712),
(0, 6927),
(0, 7079),
(0, 2523),
(0, 2176),
(0, 433),
(0, 696),
(0, 6090),
(0, 4312),
(0, 5790),
(0, 781),
(0, 474),
(0, 4870),
(0, 3399),
(0, 183),
(0, 7670),
(0, 4055),
(0, 6589),
(0, 5093),
(0, 266),
(0, 338),
(0, 3251),
(0, 5619),
(0, 2487),
(0, 2412),
(0, 1692),
(0, 7410),
(0, 3290),
(0, 3315),
(0, 6644),
(0, 6290),
(0, 3776),
(0, 6007),
(0, 664),
(0, 3906),
(0, 7590),
(0, 131),
(0, 3445),
(0, 4420),
(0, 1336),
(0, 6216),
(0, 6914),
(0, 5340),
(0, 7110),
(0, 5680),
(0, 1301),
(0, 1701),
(0, 7496),
(0, 1936),
(0, 7681),
(0, 3485),
(0, 4508),
(0, 2826),
(0, 1709),
(0, 2343),
(0, 7304),
(0, 4479),
(0, 5009),
(0, 2261),
(0, 7069),
(0, 1172),
(0, 839),
(0, 6815),
(0, 5345),
(0, 1660),
(0, 7581),
(0, 3519),
(0, 4409),
(0, 2611),
(0, 5134),
(0, 1179),
(0, 7907),
(0, 1116),
(0, 7170),
(0, 4882),
(0, 4793),
(0, 470),
(0, 4997),
(0, 2579),
(0, 3684),
(0, 586),
(0, 1968),
(0, 6056),
(0, 6479),
(0, 4794),
(0, 3330),
(0, 5835),
(0, 7339),
(0, 2689),
(0, 6166),
(0, 1802),
(0, 4060),
(0, 148),
(0, 1364),
(0, 2049),
(0, 3702),
(0, 7013),
(0, 6274),
(0, 6749),
(0, 668),
(0, 8192),
(0, 96),
(0, 2292),
(0, 6056),
(0, 5980),
(0, 4701),
(0, 5310),
(0, 6200),
(0, 5727),
(0, 6211),
(0, 7321),
(0, 6068),
(1, 4858),
(0, 2605),
(0, 6186),
(0, 1371),
(0, 8099),
(0, 4111),
(0, 6040),
(0, 4872),
(0, 3626),
(0, 1746),
(0, 7303),
(0, 6900),
(0, 5274),
(0, 2974),
(0, 7399),
(0, 5031),
(0, 4891),
(0, 7358),
(0, 7730),
(0, 2255),
(0, 1685),
(0, 2769),
(0, 3924),
(0, 5703),
(0, 70),
(0, 4991),
(0, 109),
(0, 6530),
(0, 715),
(0, 2673),
(0, 1904),
(0, 3069),
(0, 6168),
(0, 6004),
(0, 1966),
(0, 3418),
(0, 7595),
(0, 3616),
(0, 530),
(0, 5234),
(0, 7279),
(0, 7545),
(0, 2696),
(0, 6495),
(0, 3266),
(0, 2787),
(0, 6537),
(0, 3164),
(0, 4617),
(0, 5243),
(0, 6124),
(0, 2380),
(0, 2900),
(0, 3443),
(0, 974),
(0, 3543),
(0, 5848),
(0, 4680),
(0, 4419),
(0, 123),
(0, 6041),
(0, 7391),
(0, 3172),
(0, 2393),
(0, 6290),
(0, 5459),
(0, 859),
(0, 7591),
(0, 901),
(0, 6642),
(0, 1581),
(0, 3174),
(0, 6225),
(0, 8185),
(0, 6924),
(0, 6131),
(0, 2912),
(0, 4134),
(0, 5636),
(0, 2168),
(0, 5645),
(0, 277),
(0, 7866),
(0, 5717),
(0, 4149),
(0, 41),
(0, 523),
(0, 5976),
(0, 3289),
(0, 5228),
(0, 1978),
(0, 3446),
(0, 7445),
(0, 8105),
(0, 2276),
(0, 2742),
(0, 4708),
(0, 5817),
(0, 3017),
(0, 4729),
(0, 7015),
(0, 7474),
(0, 184),
(0, 1346),
(0, 4225),
(0, 683),
(0, 2229),
(0, 7668),
(1, 1028),
(0, 3705),
(0, 4617),
(0, 3341),
(0, 6652),
(0, 7622),
(0, 1429),
(0, 915),
(0, 1457),
(0, 3292),
(0, 5418),
(0, 2685),
(0, 8103),
(0, 1614),
(0, 5713),
(0, 540),
(0, 2781),
(0, 2883),
(0, 7467),
(0, 6880),
(0, 7705),
(0, 3539),
(0, 1959),
(0, 370),
(0, 1824),
(0, 4889),
(0, 5320),
(0, 5198),
(0, 4908),
(0, 378),
(0, 6579),
(0, 6352),
(0, 3974),
(0, 4254),
(0, 6712),
(0, 3581),
(0, 4297),
(0, 5762),
(0, 161),
(0, 105),
(0, 2285),
(0, 3576),
(0, 1683),
(0, 3564),
(0, 81),
(0, 2495),
(0, 1826),
(0, 309),
(0, 4314),
(0, 3385),
(0, 3129),
(0, 7047),
(0, 5479),
(0, 7782),
(0, 4583),
(0, 4513),
(0, 2513),
(0, 2835),
(0, 7107),
(0, 1368),
(0, 2507),
(0, 4263),
(0, 1157),
(1, 212),
(0, 6822),
(0, 7696),
(0, 6478),
(0, 8059),
(0, 6391),
(0, 1295),
(0, 2976),
(0, 1135),
(0, 1356),
(1, 7595),
(0, 7146),
(0, 4366),
(0, 853),
(1, 5462),
(0, 429),
(0, 3512),
(0, 7115),
(0, 3478),
(0, 2472),
(0, 3445),
(0, 5866),
(0, 4441),
(0, 6861),
(0, 6512),
(0, 7242),
(0, 4519),
(0, 1730),
(0, 3715),
(1, 3739),
(0, 3977),
(0, 4264),
(0, 4697),
(0, 7770),
(0, 6520),
(0, 5601),
(0, 6703),
(0, 7089),
(0, 1950),
(0, 5300),
(0, 6731),
(0, 7965),
(0, 6777),
(0, 118),
(0, 2751),
(0, 5862),
(0, 2827),
(0, 910),
(0, 2314),
(0, 2474),
(0, 5819),
(0, 3936),
(0, 6340),
(0, 6736),
(0, 7677),
(0, 4553),
(0, 116),
(0, 4868),
(0, 3240),
(0, 2329),
(0, 1882),
(0, 2977),
(0, 3944),
(0, 4154),
(0, 4588),
(0, 6023),
(0, 747),
(0, 5477),
(0, 7577),
(0, 7797),
(0, 356),
(0, 6979),
(0, 3050),
(0, 2785),
(0, 6771),
(0, 3360),
(0, 4200),
(0, 2939),
(0, 56),
(0, 6213),
(0, 2559),
(0, 4219),
(0, 3212),
(0, 8086),
(0, 3925),
(0, 3991),
(0, 7074),
(0, 828),
(0, 7107),
(0, 7617),
(0, 3783),
(0, 8097),
(0, 7855),
(0, 1233),
(0, 5903),
(0, 4985),
(0, 413),
(0, 2435),
(0, 1015),
(0, 6766),
(0, 29),
(0, 3217),
(0, 6814),
(1, 3860),
(0, 5535),
(0, 7052),
(0, 444),
(0, 1089),
(0, 2798),
(0, 7480),
(0, 6093),
(0, 4940),
(0, 1723),
(0, 7415),
(0, 5509),
(0, 6526),
(0, 1888),
(0, 6896),
(0, 5464),
(0, 1254),
(0, 820),
(0, 6544),
(0, 1552),
(0, 8078),
(0, 7125),
(0, 6755),
(0, 1563),
(0, 3335),
(0, 500),
(0, 7794),
(0, 290),
(0, 5494),
(0, 50),
(0, 1270),
(0, 2476),
(0, 6710),
(0, 5314),
(0, 7029),
(0, 4917),
(0, 5542),
(0, 1897),
(1, 3493),
(0, 7609),
(0, 3614),
(0, 2478),
(0, 7707),
(0, 2202),
(0, 2331),
(0, 842),
(0, 3657),
(0, 1738),
(0, 2744),
(0, 2356),
(0, 882),
(0, 6526),
(0, 7363),
(0, 3640),
(0, 6065),
(0, 1063),
(0, 717),
(0, 6747),
(0, 7595),
(0, 7369),
(0, 76),
(0, 8101),
(0, 2765),
(0, 1884),
(0, 3377),
(0, 2320),
(0, 7919),
(0, 4730),
(0, 8009),
(0, 4129),
(0, 2173),
(0, 2826),
(0, 359),
(0, 7668),
(0, 7308),
(0, 132),
(0, 7022),
(0, 967),
(0, 2807),
(0, 8139),
(0, 3801),
(1, 5517),
(1, 1373),
(0, 920),
(0, 5691),
(0, 7397),
(0, 3386),
(0, 882),
(1, 7201),
(0, 28),
(0, 3227),
(0, 7046),
(0, 1773),
(0, 4276),
(0, 4580),
(0, 5646),
(0, 2012),
(0, 551),
(0, 85),
(0, 7294),
(0, 3653),
(0, 2597),
(0, 4782),
(0, 8123),
(0, 5484),
(0, 7259),
(0, 256),
(0, 7864),
(0, 6096),
(0, 6441),
(0, 6801),
(0, 5863),
(0, 3976),
(0, 4284),
(0, 1163),
(0, 7332),
(0, 7419),
(0, 2073),
(0, 5660),
(0, 8004),
(0, 4153),
(0, 918),
(0, 2824),
(0, 245),
(0, 5567),
(0, 1231),
(0, 3629),
(0, 704),
(0, 7600),
(0, 6087),
(0, 202),
(0, 3269),
(0, 7263),
(0, 2397),
(0, 4878),
(0, 248),
(0, 6348),
(0, 7178),
(0, 8171),
(0, 6102),
(0, 3809),
(0, 3278),
(0, 4791),
(0, 3028),
(0, 4408),
(0, 3376),
(0, 7603),
(0, 1964),
(0, 2780),
(0, 6402),
(0, 5637),
(0, 7332),
(0, 2957),
(0, 6051),
(0, 7230),
(0, 6137),
(0, 7430),
(1, 388),
(0, 5722),
(0, 5430),
(0, 6032),
(0, 1627),
(0, 2125),
(0, 621),
(0, 3011),
(0, 3527),
(0, 4691),
(0, 7878),
(0, 7038),
(0, 7007),
(0, 4344),
(0, 7879),
(0, 1648),
(0, 2413),
(0, 554),
(0, 4855),
(0, 1051),
(0, 7228),
(0, 5018),
(0, 2913),
(0, 4859),
(0, 7661),
(0, 4451),
(0, 1902),
(0, 8159),
(0, 5637),
(0, 3416),
(0, 989),
(0, 6746),
(0, 3231),
(0, 4728),
(0, 3484),
(0, 583),
(0, 502),
(0, 6779),
(0, 6691),
(0, 2736),
(1, 3677),
(1, 5161),
(0, 1825),
(0, 3797),
(0, 6662),
(0, 1987),
(0, 3221),
(0, 122),
(0, 7291),
(0, 5039),
(0, 6442),
(0, 3004),
(0, 2533),
(0, 7135),
(0, 2015),
(0, 1968),
(0, 6632),
(0, 2396),
(0, 6413),
(0, 2507),
(0, 3810),
(0, 6662),
(0, 952),
(1, 1488),
(0, 3504),
(0, 3077),
(0, 1341),
(0, 4590),
(0, 2606),
(0, 5702),
(0, 4169),
(0, 3550),
(0, 2318),
(0, 7972),
(0, 6488),
(0, 2549),
(0, 5833),
(0, 4376),
(0, 6917),
(0, 3323),
(0, 8095),
(0, 1854),
(0, 5001),
(0, 5346),
(0, 6040),
(0, 2466),
(0, 1853),
(0, 6426),
(0, 3460),
(0, 7962),
(0, 3134),
(0, 7460),
(0, 69),
(0, 1514),
(0, 7246),
(0, 780),
(0, 801),
(0, 4268),
(0, 2253),
(0, 6369),
(0, 5678),
(0, 3212),
(0, 5660),
(0, 3557),
(0, 7775),
(0, 3538),
(0, 640),
(0, 4745),
(0, 6185),
(0, 4111),
(0, 2013),
(0, 5162),
(0, 1098),
(0, 2443),
(0, 1913),
(0, 1382),
(0, 6941),
(0, 4918),
(0, 4380),
(0, 5220),
(0, 4025),
(0, 7287),
(0, 7254),
(0, 75),
(0, 7353),
(0, 339),
(0, 6503),
(0, 165),
(0, 7586),
(0, 6994),
(0, 6322),
(0, 4363),
(0, 7840),
(0, 6593),
(0, 6125),
(0, 1322),
(0, 5814),
(0, 706),
(0, 2237),
(0, 3868),
(0, 4659),
(0, 1733),
(1, 3255),
(0, 945),
(0, 6484),
(0, 6464),
(0, 5357),
(0, 4078),
(0, 2161),
(0, 1541),
(0, 3981),
(0, 5435),
(0, 3548),
(0, 854),
(0, 2898),
(0, 5126),
(0, 4542),
(0, 7497),
(0, 3457),
(0, 4847),
(0, 6917),
(0, 4651),
(0, 3918),
(0, 5739),
(0, 4062),
(0, 4080),
(0, 4301),
(0, 3389),
(0, 85),
(0, 411),
(0, 3632),
(0, 7298),
(0, 3854),
(0, 4760),
(0, 955),
(0, 2571),
(0, 802),
(0, 6933),
(0, 4007),
(0, 772),
(0, 5823),
(0, 1121),
(0, 2807),
(0, 1906),
(0, 1604),
(0, 4542),
(0, 6456),
(0, 3779),
(1, 4856),
(0, 3644),
(0, 1179),
(0, 4577),
(0, 2825),
(0, 1823),
(0, 8162),
(0, 7193),
(0, 1888),
(0, 8095),
(0, 2849),
(0, 113),
(0, 7405),
(0, 2726),
(0, 6656),
(0, 3499),
(0, 3776),
(0, 6072),
(0, 3825),
(0, 3514),
(0, 147),
(0, 5475),
(0, 6668),
(0, 7541),
(0, 2682),
(0, 4689),
(0, 4387),
(0, 321),
(0, 373),
(0, 2574),
(0, 5396),
(0, 7702),
(0, 2803),
(0, 6568),
(0, 3847),
(0, 1686),
(0, 7999),
(0, 5627),
(0, 1058),
(0, 7991),
(0, 1523),
(0, 5898),
(0, 6468),
(0, 2264),
(0, 3790),
(0, 164),
(0, 1731),
(0, 7605),
(0, 963),
(0, 8050),
(0, 672),
(0, 5964),
(0, 2837),
(0, 610),
(0, 1485),
(0, 7628),
(0, 176),
(0, 6093),
(0, 2349),
(0, 5247),
(0, 7867),
(0, 1715),
(0, 7081),
(0, 2711),
(0, 5962),
(0, 562),
(0, 2245),
(0, 2058),
(0, 6459),
(0, 1581),
(0, 5189),
(0, 653),
(0, 6456),
(0, 3822),
(0, 4450),
(0, 625),
(0, 2414),
(0, 4317),
(0, 4783),
(0, 3807),
(0, 205),
(0, 2579),
(0, 1561),
(0, 5142),
(0, 1572),
(0, 3783),
(0, 6204),
(0, 1999),
(0, 1136),
(0, 2018),
(0, 7761),
(0, 2452),
(0, 6662),
(0, 1121),
(1, 1998),
(1, 5951),
(1, 399),
(1, 226),
(1, 8065),
(1, 2481),
(1, 7465),
(1, 2803),
(1, 5082),
(1, 189),
(1, 4419),
(1, 3881),
(1, 2353),
],
4096,
4096,
);
}
#[test]
fn test_balance_mux() {
help_test_mux(
&rand(61519, 13)[..],
&rand(127152, 17)[..],
&[
(1, 134),
(1, 138),
(1, 107),
(1, 183),
(1, 257),
(0, 237),
(0, 224),
(0, 21),
(1, 64),
(1, 281),
(1, 139),
(0, 364),
(1, 52),
(1, 234),
(1, 169),
(0, 106),
(1, 62),
(1, 202),
(0, 238),
(0, 347),
(1, 40),
(1, 314),
(0, 364),
(1, 216),
(0, 17),
(0, 309),
(0, 271),
(0, 172),
(0, 312),
(1, 71),
(1, 199),
(1, 272),
(1, 216),
(1, 66),
(1, 251),
(0, 101),
(0, 272),
(0, 97),
(0, 318),
(1, 162),
(1, 120),
(0, 277),
(1, 77),
(1, 258),
(1, 286),
(1, 339),
(1, 91),
(0, 221),
(1, 162),
(0, 316),
(1, 274),
(1, 14),
(0, 245),
(1, 95),
(1, 92),
(1, 268),
(1, 100),
(1, 133),
(1, 48),
(1, 196),
(1, 290),
(1, 75),
(0, 50),
(0, 231),
(1, 342),
(0, 136),
(1, 305),
(1, 27),
(1, 322),
(0, 99),
(0, 155),
(0, 150),
(1, 40),
(1, 285),
(1, 257),
(0, 162),
(1, 354),
(1, 198),
(0, 83),
(0, 187),
(1, 110),
(1, 28),
(1, 327),
(1, 200),
(1, 335),
(1, 128),
(1, 198),
(0, 256),
(1, 64),
(1, 342),
(1, 59),
(0, 166),
(0, 27),
(1, 212),
(1, 349),
(1, 82),
(0, 168),
(1, 291),
(1, 23),
(1, 321),
(1, 351),
(1, 37),
(0, 157),
(0, 56),
(1, 94),
(0, 44),
(1, 292),
(1, 184),
(1, 46),
(1, 219),
(0, 358),
(1, 318),
(1, 340),
(1, 283),
(0, 276),
(1, 319),
(1, 288),
(1, 30),
(1, 223),
(1, 354),
(1, 314),
(1, 97),
(0, 16),
(1, 49),
(1, 73),
(1, 167),
(1, 72),
(1, 11),
(1, 185),
(1, 290),
(1, 241),
(1, 139),
(1, 201),
(1, 23),
(1, 278),
(1, 278),
(1, 87),
(1, 32),
(1, 194),
(1, 93),
(0, 91),
(1, 233),
(1, 211),
(0, 152),
(0, 91),
(0, 105),
(1, 282),
(0, 349),
(0, 119),
(1, 185),
(1, 13),
(1, 50),
(0, 363),
(1, 348),
(1, 89),
(1, 78),
(1, 238),
(1, 281),
(1, 132),
(1, 258),
(1, 90),
(1, 43),
(1, 46),
(0, 105),
(1, 317),
(0, 227),
(1, 40),
(1, 325),
(0, 224),
(0, 49),
(0, 287),
(1, 304),
(0, 86),
(1, 314),
(1, 338),
(0, 53),
(0, 341),
(1, 48),
(1, 305),
(1, 79),
(1, 338),
(1, 247),
(1, 230),
(1, 16),
(1, 68),
(0, 106),
(0, 156),
(0, 200),
(0, 177),
(1, 162),
(1, 275),
(0, 344),
(1, 221),
(0, 144),
(1, 297),
(1, 221),
(1, 125),
(1, 115),
(1, 347),
(1, 287),
(0, 166),
(1, 259),
(1, 314),
(1, 300),
(1, 43),
(1, 153),
(1, 166),
(1, 46),
(1, 87),
(1, 109),
(1, 202),
(0, 34),
(1, 87),
(1, 81),
(0, 232),
(1, 245),
(1, 123),
(0, 341),
(1, 271),
(1, 296),
(1, 198),
(1, 226),
(1, 97),
(0, 123),
(1, 292),
(1, 237),
(0, 283),
(0, 85),
(0, 89),
(1, 35),
(1, 160),
(0, 246),
(0, 207),
(1, 213),
(0, 240),
(1, 13),
(1, 233),
(0, 285),
(1, 11),
(0, 203),
(1, 316),
(0, 340),
(0, 292),
(1, 126),
(1, 42),
(1, 298),
(1, 120),
(1, 239),
(0, 27),
(0, 136),
(1, 139),
(1, 141),
(1, 59),
(1, 260),
(1, 269),
(1, 74),
(1, 308),
(1, 274),
(0, 197),
(0, 71),
(1, 107),
(1, 361),
(0, 44),
(1, 158),
(1, 151),
(0, 295),
(1, 67),
(1, 24),
(0, 170),
(0, 220),
(1, 284),
(1, 197),
(1, 319),
(1, 306),
(1, 56),
(1, 231),
(1, 345),
(1, 308),
(1, 16),
(1, 314),
(0, 340),
(1, 284),
(0, 119),
(0, 184),
(1, 39),
(1, 149),
(1, 121),
(1, 231),
(1, 284),
(1, 239),
(1, 32),
(1, 141),
(1, 37),
(0, 321),
(0, 150),
(1, 153),
(0, 253),
(1, 235),
(1, 198),
(0, 189),
(0, 128),
(1, 216),
(0, 155),
(1, 135),
(1, 336),
(0, 72),
(0, 337),
(1, 97),
(1, 252),
(0, 125),
(0, 226),
(0, 221),
(1, 134),
(0, 339),
(1, 189),
(1, 131),
(1, 304),
(0, 268),
(1, 326),
(1, 60),
(0, 222),
(0, 42),
(1, 84),
(1, 33),
(1, 231),
(1, 250),
(1, 278),
(1, 321),
(0, 179),
(1, 166),
(0, 323),
(0, 342),
(1, 264),
(0, 71),
(1, 269),
(0, 226),
(1, 67),
(1, 235),
(0, 196),
(0, 335),
(1, 28),
(1, 304),
(0, 55),
(0, 335),
(1, 282),
(0, 177),
(0, 85),
(1, 152),
(1, 317),
(1, 275),
(0, 39),
(0, 234),
(1, 172),
(1, 346),
(1, 257),
(0, 293),
(1, 45),
(0, 221),
(1, 239),
(1, 158),
(1, 125),
(0, 363),
(1, 40),
(0, 227),
(1, 93),
(0, 240),
(0, 163),
(1, 333),
(1, 13),
(1, 117),
(0, 363),
(1, 212),
(1, 143),
(1, 26),
(0, 12),
(1, 45),
(1, 251),
(0, 167),
(0, 314),
(1, 123),
(1, 70),
(1, 61),
(1, 246),
(1, 79),
(0, 310),
(1, 137),
(1, 37),
(1, 151),
(1, 129),
(1, 276),
(1, 86),
(1, 48),
(0, 335),
(0, 313),
(0, 274),
(1, 104),
(0, 231),
(1, 301),
(0, 66),
(1, 12),
(0, 208),
(1, 283),
(1, 258),
(1, 237),
(1, 177),
(1, 25),
(1, 352),
(0, 340),
(0, 219),
(1, 294),
(1, 25),
(0, 223),
(0, 181),
(1, 232),
(1, 238),
(0, 303),
(1, 100),
(1, 339),
(1, 321),
(1, 71),
(1, 62),
(1, 55),
(0, 364),
(1, 334),
(1, 128),
(0, 308),
(1, 239),
(1, 167),
(0, 84),
(1, 263),
(0, 328),
(1, 151),
(1, 344),
(0, 364),
(1, 312),
(1, 334),
(1, 55),
(1, 347),
(1, 221),
(0, 42),
(1, 283),
(0, 95),
(0, 142),
(0, 36),
(1, 73),
(1, 13),
(1, 268),
(1, 181),
(1, 137),
(0, 290),
(0, 301),
(1, 323),
(1, 66),
(1, 229),
(0, 363),
(0, 216),
(0, 161),
(1, 105),
(1, 221),
(1, 291),
(1, 363),
(1, 320),
(1, 16),
(1, 220),
(1, 340),
(1, 108),
(1, 48),
(1, 154),
(1, 111),
(1, 23),
(1, 63),
(1, 69),
(1, 302),
(0, 339),
(1, 60),
(0, 206),
(1, 237),
(1, 335),
(1, 155),
(1, 179),
(1, 137),
(1, 10),
(0, 20),
(1, 281),
(1, 104),
(1, 326),
(1, 30),
(1, 21),
(1, 294),
(1, 292),
(1, 304),
(1, 242),
(1, 162),
(0, 31),
(0, 254),
(1, 220),
(1, 311),
(1, 187),
(1, 100),
(1, 215),
(1, 63),
(1, 206),
(0, 258),
(1, 120),
(1, 33),
(1, 32),
(1, 122),
(1, 270),
(0, 208),
(1, 149),
(1, 313),
(1, 147),
(1, 256),
(1, 75),
(1, 24),
(1, 80),
(0, 89),
(1, 108),
(1, 190),
(1, 167),
(1, 311),
(1, 83),
(1, 80),
(1, 350),
(0, 203),
(0, 54),
(1, 291),
(1, 220),
(1, 332),
(1, 11),
(1, 311),
(1, 106),
(1, 81),
(0, 290),
(0, 339),
(1, 296),
(0, 359),
(1, 259),
(1, 305),
(1, 324),
(1, 25),
(1, 192),
(1, 144),
(1, 353),
(1, 211),
(0, 98),
(1, 45),
(1, 99),
(1, 99),
(1, 209),
(1, 212),
(1, 189),
(0, 99),
(0, 324),
(1, 323),
(1, 304),
(1, 110),
(1, 239),
(1, 223),
(1, 197),
(1, 102),
(1, 332),
(0, 55),
(0, 286),
(1, 82),
(0, 143),
(1, 273),
(0, 252),
(1, 145),
(1, 165),
(0, 254),
(0, 37),
(1, 350),
(1, 161),
(1, 77),
(0, 302),
(1, 33),
(1, 263),
(1, 41),
(0, 184),
(0, 18),
(1, 67),
(0, 238),
(0, 172),
(1, 144),
(1, 272),
(0, 164),
(0, 63),
(0, 272),
(1, 358),
(1, 330),
(1, 351),
(1, 339),
(0, 205),
(1, 192),
(0, 134),
(1, 109),
(0, 285),
(1, 314),
(0, 19),
(1, 346),
(1, 60),
(1, 114),
(0, 26),
(0, 146),
(1, 294),
(0, 139),
(0, 361),
(1, 339),
(1, 136),
(1, 175),
(0, 167),
(1, 262),
(1, 154),
(1, 210),
(1, 43),
(1, 262),
(1, 41),
(1, 181),
(1, 339),
(1, 337),
(0, 123),
(1, 231),
(1, 268),
(0, 44),
(1, 315),
(0, 246),
(1, 279),
(0, 106),
(1, 311),
(1, 282),
(0, 65),
(1, 363),
(1, 4),
(0, 120),
(1, 148),
(0, 289),
(1, 78),
(1, 274),
(1, 295),
(1, 220),
(1, 291),
(1, 189),
(1, 110),
(0, 72),
(1, 329),
(1, 296),
(1, 213),
(0, 123),
(1, 99),
(0, 87),
(1, 291),
(1, 146),
(0, 248),
(1, 153),
(1, 167),
(1, 305),
(1, 138),
(1, 62),
(1, 352),
(0, 266),
(1, 24),
(1, 86),
(0, 136),
(0, 76),
(1, 304),
(1, 360),
(0, 265),
(0, 317),
(1, 169),
(1, 50),
(1, 244),
(1, 45),
(0, 55),
(0, 49),
(0, 172),
(1, 153),
(1, 212),
(1, 239),
(0, 47),
(0, 318),
(1, 225),
(1, 359),
(1, 159),
(1, 348),
(1, 172),
(0, 279),
(1, 327),
(0, 236),
(1, 343),
(1, 245),
(0, 102),
(1, 158),
(1, 249),
(0, 58),
(0, 359),
(0, 46),
(0, 51),
(0, 49),
(1, 298),
(1, 219),
(0, 340),
(1, 275),
(1, 319),
(1, 200),
(1, 21),
(1, 351),
(1, 279),
(0, 28),
(0, 88),
(1, 171),
(1, 154),
(1, 12),
(1, 136),
(1, 135),
(0, 11),
(0, 318),
(0, 309),
(0, 17),
(1, 324),
(1, 120),
(1, 302),
(0, 221),
(1, 87),
(1, 51),
(1, 330),
(1, 272),
(1, 78),
(1, 25),
(1, 104),
(1, 267),
(1, 49),
(1, 241),
(1, 46),
(1, 12),
(1, 185),
(0, 354),
(0, 197),
(0, 220),
(0, 122),
(1, 104),
(1, 292),
(0, 42),
(1, 136),
(1, 272),
(1, 253),
(0, 229),
(1, 97),
(1, 202),
(1, 301),
(0, 268),
(0, 107),
(0, 67),
(0, 173),
(1, 350),
(0, 350),
(1, 36),
(1, 271),
(0, 46),
(1, 71),
(1, 233),
(1, 211),
(1, 294),
(1, 264),
(1, 117),
(1, 183),
(1, 12),
(1, 309),
(0, 263),
(1, 267),
(1, 210),
(1, 81),
(1, 252),
(1, 228),
(1, 244),
(0, 149),
(0, 347),
(0, 231),
(1, 65),
(1, 247),
(0, 214),
(0, 115),
(1, 160),
(0, 43),
(1, 135),
(1, 50),
(1, 222),
(1, 301),
(0, 352),
(1, 141),
(1, 275),
(1, 35),
(1, 72),
(1, 98),
(1, 255),
(1, 363),
(1, 203),
(1, 182),
(1, 39),
(1, 86),
(1, 145),
(0, 13),
(1, 259),
(0, 40),
(1, 178),
(1, 308),
(1, 341),
(0, 124),
(0, 133),
(1, 271),
(0, 181),
(1, 39),
(0, 225),
(0, 134),
(0, 77),
(1, 328),
(1, 41),
(1, 204),
(0, 354),
(1, 219),
(0, 212),
(1, 330),
(1, 364),
(0, 341),
(1, 175),
(1, 62),
(1, 197),
(1, 51),
(0, 129),
(1, 57),
(0, 47),
(1, 234),
(1, 340),
(0, 352),
(1, 305),
(1, 148),
(1, 339),
(1, 9),
(1, 314),
(1, 95),
(1, 67),
(1, 85),
(0, 60),
(1, 86),
(1, 35),
(0, 161),
(1, 295),
(0, 149),
(1, 338),
(0, 315),
(1, 35),
(1, 224),
(1, 364),
(0, 323),
(0, 335),
(1, 26),
(1, 313),
(1, 134),
(1, 121),
(0, 351),
(1, 293),
(0, 85),
(1, 205),
(1, 167),
(0, 67),
(0, 310),
(1, 166),
(1, 107),
(1, 238),
(1, 68),
(0, 12),
(1, 5),
(1, 305),
(1, 163),
(1, 55),
(0, 88),
(0, 158),
(0, 25),
(0, 77),
(0, 146),
(0, 269),
(0, 158),
(1, 285),
(1, 196),
(1, 187),
(1, 207),
(1, 173),
(1, 173),
(1, 80),
(1, 311),
(1, 304),
(1, 230),
(1, 73),
(1, 118),
(0, 339),
(0, 329),
(0, 15),
(0, 208),
(1, 116),
(1, 339),
(1, 323),
(1, 314),
(1, 219),
(1, 129),
(0, 207),
(0, 262),
(0, 313),
(0, 127),
(1, 163),
(1, 246),
(1, 199),
(1, 17),
(1, 31),
(1, 217),
(1, 12),
(1, 140),
(0, 295),
(1, 47),
(0, 296),
(0, 353),
(1, 360),
(1, 89),
(1, 169),
(0, 329),
(0, 53),
(1, 222),
(1, 292),
(0, 336),
(0, 10),
(0, 295),
(1, 340),
(1, 287),
(0, 107),
(1, 61),
(0, 14),
(0, 298),
(0, 93),
(1, 89),
(1, 308),
(0, 144),
(0, 253),
(1, 33),
(0, 254),
(0, 196),
(0, 173),
(0, 261),
(0, 53),
(0, 86),
(1, 272),
(1, 69),
(0, 154),
(0, 107),
(0, 102),
(1, 133),
(1, 126),
(1, 276),
(1, 7),
(1, 129),
(1, 227),
(1, 250),
(0, 265),
(1, 51),
(0, 237),
(1, 225),
(0, 208),
(1, 361),
(1, 310),
(1, 31),
(1, 327),
(1, 19),
(1, 347),
(1, 32),
(0, 157),
(1, 322),
(1, 86),
(1, 134),
(1, 44),
(0, 204),
(0, 211),
(1, 342),
(1, 120),
(0, 361),
(0, 157),
(1, 280),
(0, 26),
(0, 84),
(0, 29),
(1, 244),
(1, 308),
(1, 91),
(1, 77),
(1, 318),
(1, 260),
(1, 243),
(1, 239),
(0, 77),
(0, 109),
(1, 156),
(1, 279),
(1, 125),
(1, 287),
(1, 17),
(0, 174),
(0, 209),
(0, 155),
(0, 176),
],
1,
1,
);
}
#[test]
fn test_sc3_mux() {
help_test_mux(
&rand(102828, 2)[..],
&rand(156920, 1)[..],
&[
(0, 4096),
(1, 4096),
(1, 16384),
(0, 16384),
(1, 16384),
(1, 16384),
(0, 16384),
(1, 65536),
(0, 65536),
(0, 428),
(1, 38136),
],
78000,
78000,
);
}
#[test]
fn test_long_mux() {
help_test_mux(
&rand(1000000, 1)[..],
&rand(1000000, 2)[..],
&[
(0, 1),
(0, 1000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 1),
(0, 10000),
(1, 1),
(1, 992986),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 4968),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(0, 10000),
(1, 1),
(0, 1),
(1, 4954),
(1, 1),
(0, 1),
(0, 10001),
(1, 1),
(0, 1),
(0, 10002),
(1, 1),
(0, 1),
(0, 10003),
(1, 1),
(0, 1),
(0, 10004),
(1, 1),
(0, 1),
(0, 10005),
(1, 1),
(0, 1),
(0, 10006),
(1, 1),
(0, 1),
(0, 10007),
(1, 1),
(0, 1),
(0, 10008),
(1, 1),
(0, 1),
(0, 10009),
(1, 1),
(0, 1),
(0, 10010),
(1, 1),
(0, 1),
(0, 10011),
(1, 1),
(0, 1),
(0, 10012),
(1, 1),
(0, 1),
(1, 2000),
(1, 1),
(0, 613930),
],
373,
3021,
);
}
#[test]
fn test_short_mux() {
help_test_mux(
&[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17][..],
&[
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41,
][..],
&[(0, 1), (0, 10), (1, 1), (0, 1), (1, 16), (0, 6), (1, 7)],
1,
1,
);
}
#[test]
fn unit_test_decode_mux() {
let to_decode: [u8; 41] = [
0x0,
0xf,
0x0, 0x75,
0x98,
0x10,
0x40,
0x2,
0x5,
0x8,
0x0,
0x4f,
0x85,
0x92,
0x18,
0x40,
0x80,
0x0,
0x0,
0x1,
0xf,
0x0, 0x1,
0x2a,
0x0,
0x1,
0x8,
0x0,
0x0,
0x0,
0x1,
0x42,
0x0,
0x1,
0x8,
0x0,
0x0,
0x0,
0xff,
0xfe,
0xff,
];
let mut m8 = HeapAlloc::<u8>::new(0);
let mut mux = mux::Mux::<HeapAlloc<u8>>::default();
let _actually_deserialized = mux.deserialize(&to_decode[..], &mut m8);
assert_eq!(mux.editable_data(0).slice(), &to_decode[3..3 + 16]);
assert_eq!(mux.editable_data(1).slice(), &to_decode[6 + 16..6 + 32]);
}