1*6994f6b1SLoGin //! 静态位图的集成测试 2*6994f6b1SLoGin 3*6994f6b1SLoGin use bitmap::{traits::BitMapOps, StaticBitmap}; 4*6994f6b1SLoGin 5*6994f6b1SLoGin /// 测试空的位图 6*6994f6b1SLoGin /// 7*6994f6b1SLoGin /// 这是一个测试空的位图的例子 8*6994f6b1SLoGin /// 9*6994f6b1SLoGin 10*6994f6b1SLoGin /// 测试空的位图 11*6994f6b1SLoGin #[test] 12*6994f6b1SLoGin fn test_empty_bitmap_32() { 13*6994f6b1SLoGin let mut bitmap = StaticBitmap::<32>::new(); 14*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 15*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 16*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 17*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 18*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 19*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(31)); 20*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 21*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 22*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 23*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 24*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 25*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 26*6994f6b1SLoGin bitmap.invert(); 27*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 28*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 29*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 30*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 31*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(31)); 32*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 33*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 34*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 35*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 36*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 37*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 38*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 39*6994f6b1SLoGin } 40*6994f6b1SLoGin 41*6994f6b1SLoGin #[test] 42*6994f6b1SLoGin fn test_empty_bitmap_64() { 43*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 44*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 45*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 46*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 47*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 48*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 49*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 50*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 51*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 52*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 53*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 54*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 55*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 56*6994f6b1SLoGin bitmap.invert(); 57*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 58*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 59*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 60*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 61*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 62*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 63*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 64*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 65*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 66*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 67*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 68*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 69*6994f6b1SLoGin } 70*6994f6b1SLoGin 71*6994f6b1SLoGin /// 测试长度为32的bmp,其中第一个元素为1 72*6994f6b1SLoGin #[test] 73*6994f6b1SLoGin fn test_bitmap_32_first_1() { 74*6994f6b1SLoGin let mut bitmap = StaticBitmap::<32>::new(); 75*6994f6b1SLoGin bitmap.set(0, true); 76*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 77*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 78*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 79*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(1)); 80*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(0)); 81*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(31)); 82*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 83*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 84*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 85*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 86*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 87*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 88*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(0)); 89*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(1)); 90*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), None); 91*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 92*6994f6b1SLoGin 93*6994f6b1SLoGin // 反转 94*6994f6b1SLoGin 95*6994f6b1SLoGin bitmap.invert(); 96*6994f6b1SLoGin 97*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(1)); 98*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 99*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(31)); 100*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(0)); 101*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 102*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 103*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 104*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 105*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 106*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 107*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 108*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(0)); 109*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 110*6994f6b1SLoGin } 111*6994f6b1SLoGin 112*6994f6b1SLoGin /// 测试长度为32的bmp,其中中间某个元素为1 113*6994f6b1SLoGin #[test] 114*6994f6b1SLoGin fn test_bitmap_32_middle_1() { 115*6994f6b1SLoGin let mut bitmap = StaticBitmap::<32>::new(); 116*6994f6b1SLoGin bitmap.set(15, true); 117*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 118*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 119*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(15)); 120*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 121*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(15)); 122*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(31)); 123*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(15)); 124*6994f6b1SLoGin assert_eq!(bitmap.next_index(15), None); 125*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(15), Some(16)); 126*6994f6b1SLoGin assert_eq!(bitmap.prev_index(15), None); 127*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(15), Some(14)); 128*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 129*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 130*6994f6b1SLoGin assert_eq!(bitmap.prev_index(20), Some(15)); 131*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(20), Some(19)); 132*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(15)); 133*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 134*6994f6b1SLoGin 135*6994f6b1SLoGin // 反转 136*6994f6b1SLoGin 137*6994f6b1SLoGin bitmap.invert(); 138*6994f6b1SLoGin 139*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 140*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(15)); 141*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(31)); 142*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(15)); 143*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 144*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(1), Some(15)); 145*6994f6b1SLoGin assert_eq!(bitmap.prev_index(15), Some(14)); 146*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(15), None); 147*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 148*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 149*6994f6b1SLoGin assert_eq!(bitmap.prev_index(30), Some(29)); 150*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(30), Some(15)); 151*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 152*6994f6b1SLoGin } 153*6994f6b1SLoGin 154*6994f6b1SLoGin /// 测试长度为32的bmp,其中最后一个元素为1 155*6994f6b1SLoGin #[test] 156*6994f6b1SLoGin fn test_bitmap_32_last_1() { 157*6994f6b1SLoGin let mut bitmap = StaticBitmap::<32>::new(); 158*6994f6b1SLoGin bitmap.set(31, true); 159*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 160*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 161*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(31)); 162*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 163*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(31)); 164*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(30)); 165*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(31)); 166*6994f6b1SLoGin assert_eq!(bitmap.next_index(31), None); 167*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 168*6994f6b1SLoGin assert_eq!(bitmap.prev_index(31), None); 169*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(31), Some(30)); 170*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 171*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 172*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), None); 173*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(1)); 174*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(31)); 175*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 176*6994f6b1SLoGin 177*6994f6b1SLoGin // 反转 178*6994f6b1SLoGin 179*6994f6b1SLoGin bitmap.invert(); 180*6994f6b1SLoGin 181*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 182*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(31)); 183*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(30)); 184*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(31)); 185*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 186*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(31)); 187*6994f6b1SLoGin assert_eq!(bitmap.prev_index(31), Some(30)); 188*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(31), None); 189*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 190*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 191*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 192*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), None); 193*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 194*6994f6b1SLoGin } 195*6994f6b1SLoGin 196*6994f6b1SLoGin /// 测试长度为64的bmp,其中第一个元素为1 197*6994f6b1SLoGin #[test] 198*6994f6b1SLoGin fn test_bitmap_64_first_1() { 199*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 200*6994f6b1SLoGin bitmap.set(0, true); 201*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 202*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 203*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 204*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(1)); 205*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(0)); 206*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 207*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 208*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 209*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 210*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 211*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 212*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 213*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(0)); 214*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(1)); 215*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), None); 216*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 217*6994f6b1SLoGin 218*6994f6b1SLoGin // 反转 219*6994f6b1SLoGin 220*6994f6b1SLoGin bitmap.invert(); 221*6994f6b1SLoGin 222*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(1)); 223*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 224*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 225*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(0)); 226*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 227*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 228*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 229*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(0), None); 230*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 231*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 232*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 233*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(0)); 234*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 235*6994f6b1SLoGin } 236*6994f6b1SLoGin 237*6994f6b1SLoGin /// 测试长度为64的bmp,其中中间某个元素为1 238*6994f6b1SLoGin #[test] 239*6994f6b1SLoGin fn test_bitmap_64_middle_1() { 240*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 241*6994f6b1SLoGin bitmap.set(15, true); 242*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 243*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 244*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(15)); 245*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 246*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(15)); 247*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 248*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(15)); 249*6994f6b1SLoGin assert_eq!(bitmap.next_index(15), None); 250*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(15), Some(16)); 251*6994f6b1SLoGin assert_eq!(bitmap.prev_index(15), None); 252*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(15), Some(14)); 253*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 254*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 255*6994f6b1SLoGin assert_eq!(bitmap.prev_index(20), Some(15)); 256*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(20), Some(19)); 257*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(15)); 258*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 259*6994f6b1SLoGin 260*6994f6b1SLoGin // 反转 261*6994f6b1SLoGin 262*6994f6b1SLoGin bitmap.invert(); 263*6994f6b1SLoGin 264*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 265*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(15)); 266*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 267*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(15)); 268*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 269*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(1), Some(15)); 270*6994f6b1SLoGin assert_eq!(bitmap.prev_index(15), Some(14)); 271*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(15), None); 272*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 273*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 274*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 275*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(62), Some(15)); 276*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 277*6994f6b1SLoGin } 278*6994f6b1SLoGin 279*6994f6b1SLoGin /// 测试长度为64的bmp,其中最后一个元素为1 280*6994f6b1SLoGin #[test] 281*6994f6b1SLoGin fn test_bitmap_64_last_1() { 282*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 283*6994f6b1SLoGin bitmap.set(63, true); 284*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 285*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 286*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(63)); 287*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 288*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 289*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(62)); 290*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(63)); 291*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), None); 292*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 293*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), None); 294*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(62)); 295*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 296*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 297*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), None); 298*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(1)); 299*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(63)); 300*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(3)); 301*6994f6b1SLoGin 302*6994f6b1SLoGin // 反转 303*6994f6b1SLoGin 304*6994f6b1SLoGin bitmap.invert(); 305*6994f6b1SLoGin 306*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 307*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(63)); 308*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(62)); 309*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 310*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 311*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(63)); 312*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 313*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), None); 314*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 315*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 316*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 317*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), None); 318*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 319*6994f6b1SLoGin } 320*6994f6b1SLoGin 321*6994f6b1SLoGin /// 测试长度为64的bmp,其中第一个和最后一个元素为1 322*6994f6b1SLoGin #[test] 323*6994f6b1SLoGin fn test_bitmap_64_two_1_first() { 324*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 325*6994f6b1SLoGin bitmap.set(0, true); 326*6994f6b1SLoGin bitmap.set(63, true); 327*6994f6b1SLoGin 328*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 329*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 330*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 331*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(1)); 332*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 333*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(62)); 334*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(63)); 335*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), None); 336*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 337*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(0)); 338*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(62)); 339*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 340*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 341*6994f6b1SLoGin 342*6994f6b1SLoGin // 反转 343*6994f6b1SLoGin 344*6994f6b1SLoGin bitmap.invert(); 345*6994f6b1SLoGin 346*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(1)); 347*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 348*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(62)); 349*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 350*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 351*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(63)); 352*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 353*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(0)); 354*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 355*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 356*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 357*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), Some(0)); 358*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 359*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(63)); 360*6994f6b1SLoGin } 361*6994f6b1SLoGin 362*6994f6b1SLoGin /// 测试长度为64的bmp,中间两个不相邻的元素为1 363*6994f6b1SLoGin #[test] 364*6994f6b1SLoGin fn test_bitmap_64_two_1_middle() { 365*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 366*6994f6b1SLoGin bitmap.set(15, true); 367*6994f6b1SLoGin bitmap.set(63, true); 368*6994f6b1SLoGin 369*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 370*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 371*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(15)); 372*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 373*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 374*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(62)); 375*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(15)); 376*6994f6b1SLoGin assert_eq!(bitmap.next_index(15), Some(63)); 377*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), None); 378*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 379*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(15)); 380*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(62)); 381*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 382*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 383*6994f6b1SLoGin 384*6994f6b1SLoGin // 反转 385*6994f6b1SLoGin 386*6994f6b1SLoGin bitmap.invert(); 387*6994f6b1SLoGin 388*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 389*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(15)); 390*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(62)); 391*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 392*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 393*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(15)); 394*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(15), Some(63)); 395*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 396*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(15)); 397*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 398*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 399*6994f6b1SLoGin assert_eq!(bitmap.prev_index(2), Some(1)); 400*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(2), None); 401*6994f6b1SLoGin assert_eq!(bitmap.next_index(2), Some(3)); 402*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(2), Some(15)); 403*6994f6b1SLoGin } 404*6994f6b1SLoGin 405*6994f6b1SLoGin #[test] 406*6994f6b1SLoGin fn test_bitmap_128_two_1_seperate_first() { 407*6994f6b1SLoGin let mut bitmap = StaticBitmap::<128>::new(); 408*6994f6b1SLoGin 409*6994f6b1SLoGin bitmap.set(0, true); 410*6994f6b1SLoGin bitmap.set(127, true); 411*6994f6b1SLoGin 412*6994f6b1SLoGin assert_eq!(bitmap.len(), 128); 413*6994f6b1SLoGin assert_eq!(bitmap.size(), 16); 414*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 415*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(1)); 416*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(127)); 417*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(126)); 418*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(127)); 419*6994f6b1SLoGin assert_eq!(bitmap.next_index(127), None); 420*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 421*6994f6b1SLoGin assert_eq!(bitmap.prev_index(127), Some(0)); 422*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(127), Some(126)); 423*6994f6b1SLoGin assert_eq!(bitmap.prev_index(64), Some(0)); 424*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 425*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 426*6994f6b1SLoGin 427*6994f6b1SLoGin // 反转 428*6994f6b1SLoGin 429*6994f6b1SLoGin bitmap.invert(); 430*6994f6b1SLoGin 431*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(1)); 432*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 433*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(126)); 434*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(127)); 435*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 436*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(127)); 437*6994f6b1SLoGin assert_eq!(bitmap.prev_index(127), Some(126)); 438*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(127), Some(0)); 439*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(64), Some(0)); 440*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 441*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 442*6994f6b1SLoGin } 443*6994f6b1SLoGin 444*6994f6b1SLoGin /// 长度128, 第63、64bit为1 445*6994f6b1SLoGin #[test] 446*6994f6b1SLoGin fn test_bitmap_128_two_1_nearby_middle() { 447*6994f6b1SLoGin let mut bitmap = StaticBitmap::<128>::new(); 448*6994f6b1SLoGin 449*6994f6b1SLoGin bitmap.set(63, true); 450*6994f6b1SLoGin bitmap.set(64, true); 451*6994f6b1SLoGin 452*6994f6b1SLoGin assert_eq!(bitmap.len(), 128); 453*6994f6b1SLoGin assert_eq!(bitmap.size(), 16); 454*6994f6b1SLoGin 455*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(63)); 456*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 457*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(64)); 458*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(127)); 459*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(63)); 460*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), Some(64)); 461*6994f6b1SLoGin assert_eq!(bitmap.next_index(64), None); 462*6994f6b1SLoGin 463*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 464*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(63), Some(65)); 465*6994f6b1SLoGin assert_eq!(bitmap.prev_index(64), Some(63)); 466*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(64), Some(62)); 467*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), None); 468*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(62)); 469*6994f6b1SLoGin assert_eq!(bitmap.prev_index(65), Some(64)); 470*6994f6b1SLoGin 471*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 472*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 473*6994f6b1SLoGin 474*6994f6b1SLoGin // 反转 475*6994f6b1SLoGin bitmap.invert(); 476*6994f6b1SLoGin 477*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 478*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(63)); 479*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(127)); 480*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(64)); 481*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 482*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(63)); 483*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(63), Some(64)); 484*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), Some(65)); 485*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(127), Some(64)); 486*6994f6b1SLoGin assert_eq!(bitmap.prev_index(127), Some(126)); 487*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(64), Some(63)); 488*6994f6b1SLoGin assert_eq!(bitmap.prev_index(64), Some(62)); 489*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 490*6994f6b1SLoGin 491*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 492*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 493*6994f6b1SLoGin } 494*6994f6b1SLoGin 495*6994f6b1SLoGin #[test] 496*6994f6b1SLoGin fn test_bitmap_full_32() { 497*6994f6b1SLoGin let mut bitmap = StaticBitmap::<32>::new(); 498*6994f6b1SLoGin bitmap.set_all(true); 499*6994f6b1SLoGin 500*6994f6b1SLoGin assert_eq!(bitmap.len(), 32); 501*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 502*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 503*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 504*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(31)); 505*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 506*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 507*6994f6b1SLoGin assert_eq!(bitmap.next_index(31), None); 508*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 509*6994f6b1SLoGin assert_eq!(bitmap.prev_index(31), Some(30)); 510*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(31), None); 511*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 512*6994f6b1SLoGin 513*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 514*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 515*6994f6b1SLoGin 516*6994f6b1SLoGin // 反转 517*6994f6b1SLoGin bitmap.invert(); 518*6994f6b1SLoGin 519*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 520*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 521*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 522*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(31)); 523*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 524*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 525*6994f6b1SLoGin assert_eq!(bitmap.prev_index(31), None); 526*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(31), Some(30)); 527*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 528*6994f6b1SLoGin 529*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 530*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 531*6994f6b1SLoGin } 532*6994f6b1SLoGin 533*6994f6b1SLoGin #[test] 534*6994f6b1SLoGin fn test_bitmap_full_64() { 535*6994f6b1SLoGin let mut bitmap = StaticBitmap::<64>::new(); 536*6994f6b1SLoGin bitmap.set_all(true); 537*6994f6b1SLoGin 538*6994f6b1SLoGin assert_eq!(bitmap.len(), 64); 539*6994f6b1SLoGin assert_eq!(bitmap.size(), 8); 540*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 541*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 542*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(63)); 543*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 544*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 545*6994f6b1SLoGin assert_eq!(bitmap.next_index(63), None); 546*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 547*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), Some(62)); 548*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), None); 549*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 550*6994f6b1SLoGin 551*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 552*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 553*6994f6b1SLoGin 554*6994f6b1SLoGin // 反转 555*6994f6b1SLoGin bitmap.invert(); 556*6994f6b1SLoGin 557*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 558*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 559*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 560*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(63)); 561*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 562*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 563*6994f6b1SLoGin assert_eq!(bitmap.prev_index(63), None); 564*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(63), Some(62)); 565*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 566*6994f6b1SLoGin 567*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 568*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 569*6994f6b1SLoGin } 570*6994f6b1SLoGin 571*6994f6b1SLoGin #[test] 572*6994f6b1SLoGin fn test_bitmap_full_100() { 573*6994f6b1SLoGin let mut bitmap = StaticBitmap::<100>::new(); 574*6994f6b1SLoGin bitmap.set_all(true); 575*6994f6b1SLoGin 576*6994f6b1SLoGin assert_eq!(bitmap.len(), 100); 577*6994f6b1SLoGin assert_eq!(bitmap.size(), 16); 578*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 579*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 580*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(99)); 581*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 582*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 583*6994f6b1SLoGin assert_eq!(bitmap.next_index(99), None); 584*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 585*6994f6b1SLoGin assert_eq!(bitmap.prev_index(99), Some(98)); 586*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(99), None); 587*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 588*6994f6b1SLoGin 589*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 590*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 591*6994f6b1SLoGin 592*6994f6b1SLoGin // 反转 593*6994f6b1SLoGin bitmap.invert(); 594*6994f6b1SLoGin 595*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 596*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 597*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 598*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(99)); 599*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 600*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 601*6994f6b1SLoGin assert_eq!(bitmap.prev_index(99), None); 602*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(99), Some(98)); 603*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 604*6994f6b1SLoGin 605*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 606*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 607*6994f6b1SLoGin } 608*6994f6b1SLoGin 609*6994f6b1SLoGin #[test] 610*6994f6b1SLoGin fn test_bitmap_full_128() { 611*6994f6b1SLoGin let mut bitmap = StaticBitmap::<128>::new(); 612*6994f6b1SLoGin bitmap.set_all(true); 613*6994f6b1SLoGin 614*6994f6b1SLoGin assert_eq!(bitmap.len(), 128); 615*6994f6b1SLoGin assert_eq!(bitmap.size(), 16); 616*6994f6b1SLoGin assert_eq!(bitmap.first_index(), Some(0)); 617*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), None); 618*6994f6b1SLoGin assert_eq!(bitmap.last_index(), Some(127)); 619*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), None); 620*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), Some(1)); 621*6994f6b1SLoGin assert_eq!(bitmap.next_index(127), None); 622*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), None); 623*6994f6b1SLoGin assert_eq!(bitmap.prev_index(127), Some(126)); 624*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(127), None); 625*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 626*6994f6b1SLoGin 627*6994f6b1SLoGin assert_eq!(bitmap.is_full(), true); 628*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), false); 629*6994f6b1SLoGin 630*6994f6b1SLoGin // 反转 631*6994f6b1SLoGin bitmap.invert(); 632*6994f6b1SLoGin 633*6994f6b1SLoGin assert_eq!(bitmap.first_index(), None); 634*6994f6b1SLoGin assert_eq!(bitmap.first_false_index(), Some(0)); 635*6994f6b1SLoGin assert_eq!(bitmap.last_index(), None); 636*6994f6b1SLoGin assert_eq!(bitmap.last_false_index(), Some(127)); 637*6994f6b1SLoGin assert_eq!(bitmap.next_index(0), None); 638*6994f6b1SLoGin assert_eq!(bitmap.next_false_index(0), Some(1)); 639*6994f6b1SLoGin assert_eq!(bitmap.prev_index(127), None); 640*6994f6b1SLoGin assert_eq!(bitmap.prev_false_index(127), Some(126)); 641*6994f6b1SLoGin assert_eq!(bitmap.prev_index(0), None); 642*6994f6b1SLoGin 643*6994f6b1SLoGin assert_eq!(bitmap.is_full(), false); 644*6994f6b1SLoGin assert_eq!(bitmap.is_empty(), true); 645*6994f6b1SLoGin } 646