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