xref: /DragonOS/kernel/crates/bitmap/tests/static-bitmap.rs (revision b2ca6800f9d943e5d3656d9b50a099da768775a7)
16994f6b1SLoGin //! 静态位图的集成测试
26994f6b1SLoGin 
36994f6b1SLoGin use bitmap::{traits::BitMapOps, StaticBitmap};
46994f6b1SLoGin 
56994f6b1SLoGin /// 测试空的位图
66994f6b1SLoGin ///
76994f6b1SLoGin /// 这是一个测试空的位图的例子
86994f6b1SLoGin ///
96994f6b1SLoGin 
106994f6b1SLoGin /// 测试空的位图
116994f6b1SLoGin #[test]
test_empty_bitmap_32()126994f6b1SLoGin fn test_empty_bitmap_32() {
136994f6b1SLoGin     let mut bitmap = StaticBitmap::<32>::new();
146994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
156994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
166994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
176994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
186994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
196994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(31));
206994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
216994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
226994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
236994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
246994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
256994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
266994f6b1SLoGin     bitmap.invert();
276994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
286994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
296994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
306994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
316994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(31));
326994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
336994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
346994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
356994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
366994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
376994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
386994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
396994f6b1SLoGin }
406994f6b1SLoGin 
416994f6b1SLoGin #[test]
test_empty_bitmap_64()426994f6b1SLoGin fn test_empty_bitmap_64() {
436994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
446994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
456994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
466994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
476994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
486994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
496994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
506994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
516994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
526994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
536994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
546994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
556994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
566994f6b1SLoGin     bitmap.invert();
576994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
586994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
596994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
606994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
616994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
626994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
636994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
646994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
656994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
666994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
676994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
686994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
696994f6b1SLoGin }
706994f6b1SLoGin 
716994f6b1SLoGin /// 测试长度为32的bmp,其中第一个元素为1
726994f6b1SLoGin #[test]
test_static_bitmap_32_first_1()73*b2ca6800SLoGin fn test_static_bitmap_32_first_1() {
746994f6b1SLoGin     let mut bitmap = StaticBitmap::<32>::new();
756994f6b1SLoGin     bitmap.set(0, true);
766994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
776994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
786994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
796994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(1));
806994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(0));
816994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(31));
826994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
836994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
846994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
856994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
866994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
876994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
886994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(0));
896994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(1));
906994f6b1SLoGin     assert_eq!(bitmap.next_index(2), None);
916994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
926994f6b1SLoGin 
936994f6b1SLoGin     // 反转
946994f6b1SLoGin 
956994f6b1SLoGin     bitmap.invert();
966994f6b1SLoGin 
976994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(1));
986994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
996994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(31));
1006994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(0));
1016994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
1026994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
1036994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
1046994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
1056994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
1066994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
1076994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
1086994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(0));
1096994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
1106994f6b1SLoGin }
1116994f6b1SLoGin 
1126994f6b1SLoGin /// 测试长度为32的bmp,其中中间某个元素为1
1136994f6b1SLoGin #[test]
test_static_bitmap_32_middle_1()114*b2ca6800SLoGin fn test_static_bitmap_32_middle_1() {
1156994f6b1SLoGin     let mut bitmap = StaticBitmap::<32>::new();
1166994f6b1SLoGin     bitmap.set(15, true);
1176994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
1186994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
1196994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(15));
1206994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
1216994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(15));
1226994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(31));
1236994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(15));
1246994f6b1SLoGin     assert_eq!(bitmap.next_index(15), None);
1256994f6b1SLoGin     assert_eq!(bitmap.next_false_index(15), Some(16));
1266994f6b1SLoGin     assert_eq!(bitmap.prev_index(15), None);
1276994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(15), Some(14));
1286994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
1296994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
1306994f6b1SLoGin     assert_eq!(bitmap.prev_index(20), Some(15));
1316994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(20), Some(19));
1326994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(15));
1336994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
1346994f6b1SLoGin 
1356994f6b1SLoGin     // 反转
1366994f6b1SLoGin 
1376994f6b1SLoGin     bitmap.invert();
1386994f6b1SLoGin 
1396994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
1406994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(15));
1416994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(31));
1426994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(15));
1436994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
1446994f6b1SLoGin     assert_eq!(bitmap.next_false_index(1), Some(15));
1456994f6b1SLoGin     assert_eq!(bitmap.prev_index(15), Some(14));
1466994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(15), None);
1476994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
1486994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
1496994f6b1SLoGin     assert_eq!(bitmap.prev_index(30), Some(29));
1506994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(30), Some(15));
1516994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
1526994f6b1SLoGin }
1536994f6b1SLoGin 
1546994f6b1SLoGin /// 测试长度为32的bmp,其中最后一个元素为1
1556994f6b1SLoGin #[test]
test_static_bitmap_32_last_1()156*b2ca6800SLoGin fn test_static_bitmap_32_last_1() {
1576994f6b1SLoGin     let mut bitmap = StaticBitmap::<32>::new();
1586994f6b1SLoGin     bitmap.set(31, true);
1596994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
1606994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
1616994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(31));
1626994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
1636994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(31));
1646994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(30));
1656994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(31));
1666994f6b1SLoGin     assert_eq!(bitmap.next_index(31), None);
1676994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
1686994f6b1SLoGin     assert_eq!(bitmap.prev_index(31), None);
1696994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(31), Some(30));
1706994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
1716994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
1726994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), None);
1736994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(1));
1746994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(31));
1756994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
1766994f6b1SLoGin 
1776994f6b1SLoGin     // 反转
1786994f6b1SLoGin 
1796994f6b1SLoGin     bitmap.invert();
1806994f6b1SLoGin 
1816994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
1826994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(31));
1836994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(30));
1846994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(31));
1856994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
1866994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(31));
1876994f6b1SLoGin     assert_eq!(bitmap.prev_index(31), Some(30));
1886994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(31), None);
1896994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
1906994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
1916994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
1926994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), None);
1936994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
1946994f6b1SLoGin }
1956994f6b1SLoGin 
1966994f6b1SLoGin /// 测试长度为64的bmp,其中第一个元素为1
1976994f6b1SLoGin #[test]
test_static_bitmap_64_first_1()198*b2ca6800SLoGin fn test_static_bitmap_64_first_1() {
1996994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
2006994f6b1SLoGin     bitmap.set(0, true);
2016994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
2026994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
2036994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
2046994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(1));
2056994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(0));
2066994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
2076994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
2086994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
2096994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
2106994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
2116994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
2126994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
2136994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(0));
2146994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(1));
2156994f6b1SLoGin     assert_eq!(bitmap.next_index(2), None);
2166994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
2176994f6b1SLoGin 
2186994f6b1SLoGin     // 反转
2196994f6b1SLoGin 
2206994f6b1SLoGin     bitmap.invert();
2216994f6b1SLoGin 
2226994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(1));
2236994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
2246994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
2256994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(0));
2266994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
2276994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
2286994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
2296994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(0), None);
2306994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
2316994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
2326994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
2336994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(0));
2346994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
2356994f6b1SLoGin }
2366994f6b1SLoGin 
2376994f6b1SLoGin /// 测试长度为64的bmp,其中中间某个元素为1
2386994f6b1SLoGin #[test]
test_static_bitmap_64_middle_1()239*b2ca6800SLoGin fn test_static_bitmap_64_middle_1() {
2406994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
2416994f6b1SLoGin     bitmap.set(15, true);
2426994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
2436994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
2446994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(15));
2456994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
2466994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(15));
2476994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
2486994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(15));
2496994f6b1SLoGin     assert_eq!(bitmap.next_index(15), None);
2506994f6b1SLoGin     assert_eq!(bitmap.next_false_index(15), Some(16));
2516994f6b1SLoGin     assert_eq!(bitmap.prev_index(15), None);
2526994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(15), Some(14));
2536994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
2546994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
2556994f6b1SLoGin     assert_eq!(bitmap.prev_index(20), Some(15));
2566994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(20), Some(19));
2576994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(15));
2586994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
2596994f6b1SLoGin 
2606994f6b1SLoGin     // 反转
2616994f6b1SLoGin 
2626994f6b1SLoGin     bitmap.invert();
2636994f6b1SLoGin 
2646994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
2656994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(15));
2666994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
2676994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(15));
2686994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
2696994f6b1SLoGin     assert_eq!(bitmap.next_false_index(1), Some(15));
2706994f6b1SLoGin     assert_eq!(bitmap.prev_index(15), Some(14));
2716994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(15), None);
2726994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
2736994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
2746994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
2756994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(62), Some(15));
2766994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
2776994f6b1SLoGin }
2786994f6b1SLoGin 
2796994f6b1SLoGin /// 测试长度为64的bmp,其中最后一个元素为1
2806994f6b1SLoGin #[test]
test_static_bitmap_64_last_1()281*b2ca6800SLoGin fn test_static_bitmap_64_last_1() {
2826994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
2836994f6b1SLoGin     bitmap.set(63, true);
2846994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
2856994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
2866994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(63));
2876994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
2886994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
2896994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(62));
2906994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(63));
2916994f6b1SLoGin     assert_eq!(bitmap.next_index(63), None);
2926994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
2936994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), None);
2946994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(62));
2956994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
2966994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
2976994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), None);
2986994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(1));
2996994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(63));
3006994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(3));
3016994f6b1SLoGin 
3026994f6b1SLoGin     // 反转
3036994f6b1SLoGin 
3046994f6b1SLoGin     bitmap.invert();
3056994f6b1SLoGin 
3066994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
3076994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(63));
3086994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(62));
3096994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
3106994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
3116994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(63));
3126994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
3136994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), None);
3146994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
3156994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
3166994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
3176994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), None);
3186994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
3196994f6b1SLoGin }
3206994f6b1SLoGin 
3216994f6b1SLoGin /// 测试长度为64的bmp,其中第一个和最后一个元素为1
3226994f6b1SLoGin #[test]
test_static_bitmap_64_two_1_first()323*b2ca6800SLoGin fn test_static_bitmap_64_two_1_first() {
3246994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
3256994f6b1SLoGin     bitmap.set(0, true);
3266994f6b1SLoGin     bitmap.set(63, true);
3276994f6b1SLoGin 
3286994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
3296994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
3306994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
3316994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(1));
3326994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
3336994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(62));
3346994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(63));
3356994f6b1SLoGin     assert_eq!(bitmap.next_index(63), None);
3366994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
3376994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(0));
3386994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(62));
3396994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
3406994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
3416994f6b1SLoGin 
3426994f6b1SLoGin     // 反转
3436994f6b1SLoGin 
3446994f6b1SLoGin     bitmap.invert();
3456994f6b1SLoGin 
3466994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(1));
3476994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
3486994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(62));
3496994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
3506994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
3516994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(63));
3526994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
3536994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(0));
3546994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
3556994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
3566994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
3576994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), Some(0));
3586994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
3596994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(63));
3606994f6b1SLoGin }
3616994f6b1SLoGin 
3626994f6b1SLoGin /// 测试长度为64的bmp,中间两个不相邻的元素为1
3636994f6b1SLoGin #[test]
test_static_bitmap_64_two_1_middle()364*b2ca6800SLoGin fn test_static_bitmap_64_two_1_middle() {
3656994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
3666994f6b1SLoGin     bitmap.set(15, true);
3676994f6b1SLoGin     bitmap.set(63, true);
3686994f6b1SLoGin 
3696994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
3706994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
3716994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(15));
3726994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
3736994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
3746994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(62));
3756994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(15));
3766994f6b1SLoGin     assert_eq!(bitmap.next_index(15), Some(63));
3776994f6b1SLoGin     assert_eq!(bitmap.next_index(63), None);
3786994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
3796994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(15));
3806994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(62));
3816994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
3826994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
3836994f6b1SLoGin 
3846994f6b1SLoGin     // 反转
3856994f6b1SLoGin 
3866994f6b1SLoGin     bitmap.invert();
3876994f6b1SLoGin 
3886994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
3896994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(15));
3906994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(62));
3916994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
3926994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
3936994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(15));
3946994f6b1SLoGin     assert_eq!(bitmap.next_false_index(15), Some(63));
3956994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
3966994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(15));
3976994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
3986994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
3996994f6b1SLoGin     assert_eq!(bitmap.prev_index(2), Some(1));
4006994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(2), None);
4016994f6b1SLoGin     assert_eq!(bitmap.next_index(2), Some(3));
4026994f6b1SLoGin     assert_eq!(bitmap.next_false_index(2), Some(15));
4036994f6b1SLoGin }
4046994f6b1SLoGin 
4056994f6b1SLoGin #[test]
test_static_bitmap_128_two_1_seperate_first()406*b2ca6800SLoGin fn test_static_bitmap_128_two_1_seperate_first() {
4076994f6b1SLoGin     let mut bitmap = StaticBitmap::<128>::new();
4086994f6b1SLoGin 
4096994f6b1SLoGin     bitmap.set(0, true);
4106994f6b1SLoGin     bitmap.set(127, true);
4116994f6b1SLoGin 
4126994f6b1SLoGin     assert_eq!(bitmap.len(), 128);
4136994f6b1SLoGin     assert_eq!(bitmap.size(), 16);
4146994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
4156994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(1));
4166994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(127));
4176994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(126));
4186994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(127));
4196994f6b1SLoGin     assert_eq!(bitmap.next_index(127), None);
4206994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
4216994f6b1SLoGin     assert_eq!(bitmap.prev_index(127), Some(0));
4226994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(127), Some(126));
4236994f6b1SLoGin     assert_eq!(bitmap.prev_index(64), Some(0));
4246994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
4256994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
4266994f6b1SLoGin 
4276994f6b1SLoGin     // 反转
4286994f6b1SLoGin 
4296994f6b1SLoGin     bitmap.invert();
4306994f6b1SLoGin 
4316994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(1));
4326994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
4336994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(126));
4346994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(127));
4356994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
4366994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(127));
4376994f6b1SLoGin     assert_eq!(bitmap.prev_index(127), Some(126));
4386994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(127), Some(0));
4396994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(64), Some(0));
4406994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
4416994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
4426994f6b1SLoGin }
4436994f6b1SLoGin 
4446994f6b1SLoGin /// 长度128, 第63、64bit为1
4456994f6b1SLoGin #[test]
test_static_bitmap_128_two_1_nearby_middle()446*b2ca6800SLoGin fn test_static_bitmap_128_two_1_nearby_middle() {
4476994f6b1SLoGin     let mut bitmap = StaticBitmap::<128>::new();
4486994f6b1SLoGin 
4496994f6b1SLoGin     bitmap.set(63, true);
4506994f6b1SLoGin     bitmap.set(64, true);
4516994f6b1SLoGin 
4526994f6b1SLoGin     assert_eq!(bitmap.len(), 128);
4536994f6b1SLoGin     assert_eq!(bitmap.size(), 16);
4546994f6b1SLoGin 
4556994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(63));
4566994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
4576994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(64));
4586994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(127));
4596994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(63));
4606994f6b1SLoGin     assert_eq!(bitmap.next_index(63), Some(64));
4616994f6b1SLoGin     assert_eq!(bitmap.next_index(64), None);
4626994f6b1SLoGin 
4636994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
4646994f6b1SLoGin     assert_eq!(bitmap.next_false_index(63), Some(65));
4656994f6b1SLoGin     assert_eq!(bitmap.prev_index(64), Some(63));
4666994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(64), Some(62));
4676994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), None);
4686994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(62));
4696994f6b1SLoGin     assert_eq!(bitmap.prev_index(65), Some(64));
4706994f6b1SLoGin 
4716994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
4726994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
4736994f6b1SLoGin 
4746994f6b1SLoGin     // 反转
4756994f6b1SLoGin     bitmap.invert();
4766994f6b1SLoGin 
4776994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
4786994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(63));
4796994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(127));
4806994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(64));
4816994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
4826994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(63));
4836994f6b1SLoGin     assert_eq!(bitmap.next_false_index(63), Some(64));
4846994f6b1SLoGin     assert_eq!(bitmap.next_index(63), Some(65));
4856994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(127), Some(64));
4866994f6b1SLoGin     assert_eq!(bitmap.prev_index(127), Some(126));
4876994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(64), Some(63));
4886994f6b1SLoGin     assert_eq!(bitmap.prev_index(64), Some(62));
4896994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
4906994f6b1SLoGin 
4916994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
4926994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
4936994f6b1SLoGin }
4946994f6b1SLoGin 
4956994f6b1SLoGin #[test]
test_static_bitmap_full_32()496*b2ca6800SLoGin fn test_static_bitmap_full_32() {
4976994f6b1SLoGin     let mut bitmap = StaticBitmap::<32>::new();
4986994f6b1SLoGin     bitmap.set_all(true);
4996994f6b1SLoGin 
5006994f6b1SLoGin     assert_eq!(bitmap.len(), 32);
5016994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
5026994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
5036994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
5046994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(31));
5056994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
5066994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
5076994f6b1SLoGin     assert_eq!(bitmap.next_index(31), None);
5086994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
5096994f6b1SLoGin     assert_eq!(bitmap.prev_index(31), Some(30));
5106994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(31), None);
5116994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
5126994f6b1SLoGin 
5136994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
5146994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
5156994f6b1SLoGin 
5166994f6b1SLoGin     // 反转
5176994f6b1SLoGin     bitmap.invert();
5186994f6b1SLoGin 
5196994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
5206994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
5216994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
5226994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(31));
5236994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
5246994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
5256994f6b1SLoGin     assert_eq!(bitmap.prev_index(31), None);
5266994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(31), Some(30));
5276994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
5286994f6b1SLoGin 
5296994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
5306994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
5316994f6b1SLoGin }
5326994f6b1SLoGin 
5336994f6b1SLoGin #[test]
test_static_bitmap_full_64()534*b2ca6800SLoGin fn test_static_bitmap_full_64() {
5356994f6b1SLoGin     let mut bitmap = StaticBitmap::<64>::new();
5366994f6b1SLoGin     bitmap.set_all(true);
5376994f6b1SLoGin 
5386994f6b1SLoGin     assert_eq!(bitmap.len(), 64);
5396994f6b1SLoGin     assert_eq!(bitmap.size(), 8);
5406994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
5416994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
5426994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(63));
5436994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
5446994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
5456994f6b1SLoGin     assert_eq!(bitmap.next_index(63), None);
5466994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
5476994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), Some(62));
5486994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), None);
5496994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
5506994f6b1SLoGin 
5516994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
5526994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
5536994f6b1SLoGin 
5546994f6b1SLoGin     // 反转
5556994f6b1SLoGin     bitmap.invert();
5566994f6b1SLoGin 
5576994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
5586994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
5596994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
5606994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(63));
5616994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
5626994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
5636994f6b1SLoGin     assert_eq!(bitmap.prev_index(63), None);
5646994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(63), Some(62));
5656994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
5666994f6b1SLoGin 
5676994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
5686994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
5696994f6b1SLoGin }
5706994f6b1SLoGin 
5716994f6b1SLoGin #[test]
test_static_bitmap_full_100()572*b2ca6800SLoGin fn test_static_bitmap_full_100() {
5736994f6b1SLoGin     let mut bitmap = StaticBitmap::<100>::new();
5746994f6b1SLoGin     bitmap.set_all(true);
5756994f6b1SLoGin 
5766994f6b1SLoGin     assert_eq!(bitmap.len(), 100);
5776994f6b1SLoGin     assert_eq!(bitmap.size(), 16);
5786994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
5796994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
5806994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(99));
5816994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
5826994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
5836994f6b1SLoGin     assert_eq!(bitmap.next_index(99), None);
5846994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
5856994f6b1SLoGin     assert_eq!(bitmap.prev_index(99), Some(98));
5866994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(99), None);
5876994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
5886994f6b1SLoGin 
5896994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
5906994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
5916994f6b1SLoGin 
5926994f6b1SLoGin     // 反转
5936994f6b1SLoGin     bitmap.invert();
5946994f6b1SLoGin 
5956994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
5966994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
5976994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
5986994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(99));
5996994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
6006994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
6016994f6b1SLoGin     assert_eq!(bitmap.prev_index(99), None);
6026994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(99), Some(98));
6036994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
6046994f6b1SLoGin 
6056994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
6066994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
6076994f6b1SLoGin }
6086994f6b1SLoGin 
6096994f6b1SLoGin #[test]
test_static_bitmap_full_128()610*b2ca6800SLoGin fn test_static_bitmap_full_128() {
6116994f6b1SLoGin     let mut bitmap = StaticBitmap::<128>::new();
6126994f6b1SLoGin     bitmap.set_all(true);
6136994f6b1SLoGin 
6146994f6b1SLoGin     assert_eq!(bitmap.len(), 128);
6156994f6b1SLoGin     assert_eq!(bitmap.size(), 16);
6166994f6b1SLoGin     assert_eq!(bitmap.first_index(), Some(0));
6176994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), None);
6186994f6b1SLoGin     assert_eq!(bitmap.last_index(), Some(127));
6196994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), None);
6206994f6b1SLoGin     assert_eq!(bitmap.next_index(0), Some(1));
6216994f6b1SLoGin     assert_eq!(bitmap.next_index(127), None);
6226994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), None);
6236994f6b1SLoGin     assert_eq!(bitmap.prev_index(127), Some(126));
6246994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(127), None);
6256994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
6266994f6b1SLoGin 
6276994f6b1SLoGin     assert_eq!(bitmap.is_full(), true);
6286994f6b1SLoGin     assert_eq!(bitmap.is_empty(), false);
6296994f6b1SLoGin 
6306994f6b1SLoGin     // 反转
6316994f6b1SLoGin     bitmap.invert();
6326994f6b1SLoGin 
6336994f6b1SLoGin     assert_eq!(bitmap.first_index(), None);
6346994f6b1SLoGin     assert_eq!(bitmap.first_false_index(), Some(0));
6356994f6b1SLoGin     assert_eq!(bitmap.last_index(), None);
6366994f6b1SLoGin     assert_eq!(bitmap.last_false_index(), Some(127));
6376994f6b1SLoGin     assert_eq!(bitmap.next_index(0), None);
6386994f6b1SLoGin     assert_eq!(bitmap.next_false_index(0), Some(1));
6396994f6b1SLoGin     assert_eq!(bitmap.prev_index(127), None);
6406994f6b1SLoGin     assert_eq!(bitmap.prev_false_index(127), Some(126));
6416994f6b1SLoGin     assert_eq!(bitmap.prev_index(0), None);
6426994f6b1SLoGin 
6436994f6b1SLoGin     assert_eq!(bitmap.is_full(), false);
6446994f6b1SLoGin     assert_eq!(bitmap.is_empty(), true);
6456994f6b1SLoGin }
646