#![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::::new(0); let mut v = Vec::::new(); let mut mux = mux::Mux::>::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::>::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 { 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, // 16 bytes on stream 0 0x75, 0x98, 0x10, 0x40, 0x2, 0x5, 0x8, 0x0, 0x4f, 0x85, 0x92, 0x18, 0x40, 0x80, 0x0, 0x0, 0x1, 0xf, 0x0, // 16 bytes on stream1 0x1, 0x2a, 0x0, 0x1, 0x8, 0x0, 0x0, 0x0, 0x1, 0x42, 0x0, 0x1, 0x8, 0x0, 0x0, 0x0, 0xff, 0xfe, 0xff, ]; let mut m8 = HeapAlloc::::new(0); let mut mux = mux::Mux::>::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]); }