Changeset 510
- Timestamp:
- 11/21/07 16:06:12 (1 year ago)
- Files:
-
- candidate/phobos/std/algorithm.d (modified) (3 diffs)
- candidate/phobos/std/bitarray.d (modified) (1 diff)
- candidate/phobos/std/bitmanip.d (modified) (28 diffs)
- candidate/phobos/std/c/windows/windows.d (modified) (1 diff)
- candidate/phobos/std/contracts.d (modified) (4 diffs)
- candidate/phobos/std/conv.d (modified) (1 diff)
- candidate/phobos/std/cover.d (modified) (1 diff)
- candidate/phobos/std/file.d (modified) (1 diff)
- candidate/phobos/std/math.d (modified) (6 diffs)
- candidate/phobos/std/numeric.d (modified) (2 diffs)
- candidate/phobos/std/path.d (modified) (2 diffs)
- candidate/phobos/std/process.d (modified) (2 diffs)
- candidate/phobos/std/random.d (modified) (4 diffs)
- candidate/phobos/std/regexp.d (modified) (3 diffs)
- candidate/phobos/std/stdio.d (modified) (4 diffs)
- candidate/phobos/std/string.d (modified) (3 diffs)
- candidate/phobos/std/traits.d (modified) (12 diffs)
- candidate/phobos/std/typecons.d (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
candidate/phobos/std/algorithm.d
r507 r510 36 36 37 37 module std.algorithm; 38 import std.stdio, std.math, std.random, std.date, std.functional; 38 private import std.stdio; 39 private import std.math; 40 private import std.random; 41 private import std.date; 42 private import std.functional; 39 43 40 44 /* The iterator-related part below is undocumented and might … … 121 125 122 126 /** 123 Implements C.A.R. Hoare's $(LINK2 http://tinyurl.com/27fk5o, 127 Implements C.A.R. Hoare's 128 $(LINK2 http://en.wikipedia.org/wiki/Selection_algorithm#Partition-based_general_selection_algorithm, 124 129 partition) algorithm. Specifically, reorders the range [$(D_PARAM 125 130 left), $(D_PARAM right)$(RPAREN) such that everything strictly smaller … … 230 235 } 231 236 232 unittest { 233 scope(failure) writeln(stderr, "Failure testing algorithm"); 234 auto v = ([ 25, 7, 9, 2, 0, 5, 21 ]).dup; 235 auto n = 4; 236 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 237 assert(v[n] == 9); 238 // 239 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 240 n = 3; 241 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 242 assert(v[n] == 3); 243 // 244 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 245 n = 1; 246 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 247 assert(v[n] == 2); 248 // 249 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 250 n = v.length - 1; 251 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 252 assert(v[n] == 7); 253 // 254 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 255 n = 0; 256 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 257 assert(v[n] == 1); 237 unittest 238 { 239 scope(failure) writeln(stderr, "Failure testing algorithm"); 240 auto v = ([ 25, 7, 9, 2, 0, 5, 21 ]).dup; 241 auto n = 4; 242 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 243 assert(v[n] == 9); 244 // 245 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 246 n = 3; 247 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 248 assert(v[n] == 3); 249 // 250 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 251 n = 1; 252 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 253 assert(v[n] == 2); 254 // 255 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 256 n = v.length - 1; 257 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 258 assert(v[n] == 7); 259 // 260 v = ([3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5]).dup; 261 n = 0; 262 nthElement!(less)(v.ptr, v.ptr + n, v.ptr + v.length); 263 assert(v[n] == 1); 258 264 } 259 265 candidate/phobos/std/bitarray.d
r496 r510 11 11 module std.bitarray; 12 12 public import std.bitmanip; 13 14 pragma(msg, "You may want to import std.bitmanip instead of std.bitarray"); candidate/phobos/std/bitmanip.d
r495 r510 10 10 module std.bitmanip; 11 11 12 //debug = bitarray; // uncomment to turn on debugging printf's12 //debug = bitarray; // uncomment to turn on debugging printf's 13 13 14 14 private import std.intrinsic; 15 import std.stdio; 15 private import std.metastrings; 16 private import std.stdio; 16 17 17 18 private string myToString(ulong n) … … 268 269 size_t dim() 269 270 { 270 return (len + 31) / 32;271 return (len + 31) / 32; 271 272 } 272 273 273 274 size_t length() 274 275 { 275 return len;276 return len; 276 277 } 277 278 278 279 void length(size_t newlen) 279 280 { 280 if (newlen != len)281 {282 size_t olddim = dim();283 size_t newdim = (newlen + 31) / 32;284 285 if (newdim != olddim)286 {287 // Create a fake array so we can use D's realloc machinery288 uint[] b = ptr[0 .. olddim];289 b.length = newdim;// realloc290 ptr = b.ptr;291 if (newdim & 31)292 { // Set any pad bits to 0293 ptr[newdim - 1] &= ~(~0 << (newdim & 31));294 }295 }296 297 len = newlen;298 }281 if (newlen != len) 282 { 283 size_t olddim = dim(); 284 size_t newdim = (newlen + 31) / 32; 285 286 if (newdim != olddim) 287 { 288 // Create a fake array so we can use D's realloc machinery 289 uint[] b = ptr[0 .. olddim]; 290 b.length = newdim; // realloc 291 ptr = b.ptr; 292 if (newdim & 31) 293 { // Set any pad bits to 0 294 ptr[newdim - 1] &= ~(~0 << (newdim & 31)); 295 } 296 } 297 298 len = newlen; 299 } 299 300 } 300 301 … … 305 306 in 306 307 { 307 assert(i < len);308 assert(i < len); 308 309 } 309 310 body 310 311 { 311 return cast(bool)bt(ptr, i);312 return cast(bool)bt(ptr, i); 312 313 } 313 314 … … 316 317 in 317 318 { 318 assert(i < len);319 assert(i < len); 319 320 } 320 321 body 321 322 { 322 if (b)323 bts(ptr, i);324 else325 btr(ptr, i);326 return b;323 if (b) 324 bts(ptr, i); 325 else 326 btr(ptr, i); 327 return b; 327 328 } 328 329 … … 332 333 BitArray dup() 333 334 { 334 BitArray ba;335 336 uint[] b = ptr[0 .. dim].dup;337 ba.len = len;338 ba.ptr = b.ptr;339 return ba;340 } 341 342 unittest 343 { 344 BitArray a;345 BitArray b;346 int i;347 348 debug(bitarray) printf("BitArray.dup.unittest\n");349 350 a.length = 3;351 a[0] = 1; a[1] = 0; a[2] = 1;352 b = a.dup;353 assert(b.length == 3);354 for (i = 0; i < 3; i++)355 { debug(bitarray) printf("b[%d] = %d\n", i, b[i]);356 assert(b[i] == (((i ^ 1) & 1) ? true : false));357 }335 BitArray ba; 336 337 uint[] b = ptr[0 .. dim].dup; 338 ba.len = len; 339 ba.ptr = b.ptr; 340 return ba; 341 } 342 343 unittest 344 { 345 BitArray a; 346 BitArray b; 347 int i; 348 349 debug(bitarray) printf("BitArray.dup.unittest\n"); 350 351 a.length = 3; 352 a[0] = 1; a[1] = 0; a[2] = 1; 353 b = a.dup; 354 assert(b.length == 3); 355 for (i = 0; i < 3; i++) 356 { debug(bitarray) printf("b[%d] = %d\n", i, b[i]); 357 assert(b[i] == (((i ^ 1) & 1) ? true : false)); 358 } 358 359 } 359 360 … … 363 364 int opApply(int delegate(inout bool) dg) 364 365 { 365 int result;366 367 for (size_t i = 0; i < len; i++)368 { bool b = opIndex(i);369 result = dg(b);370 (*this)[i] = b;371 if (result)372 break;373 }374 return result;366 int result; 367 368 for (size_t i = 0; i < len; i++) 369 { bool b = opIndex(i); 370 result = dg(b); 371 (*this)[i] = b; 372 if (result) 373 break; 374 } 375 return result; 375 376 } 376 377 … … 378 379 int opApply(int delegate(inout size_t, inout bool) dg) 379 380 { 380 int result;381 382 for (size_t i = 0; i < len; i++)383 { bool b = opIndex(i);384 result = dg(i, b);385 (*this)[i] = b;386 if (result)387 break;388 }389 return result;390 } 391 392 unittest 393 { 394 debug(bitarray) printf("BitArray.opApply unittest\n");395 396 static bool[] ba = [1,0,1];397 398 BitArray a; a.init(ba);399 400 int i;401 foreach (b;a)402 {403 switch (i)404 {case 0: assert(b == true); break;405 case 1: assert(b == false); break;406 case 2: assert(b == true); break;407 default: assert(0);408 }409 i++;410 }411 412 foreach (j,b;a)413 {414 switch (j)415 {case 0: assert(b == true); break;416 case 1: assert(b == false); break;417 case 2: assert(b == true); break;418 default: assert(0);419 }420 }381 int result; 382 383 for (size_t i = 0; i < len; i++) 384 { bool b = opIndex(i); 385 result = dg(i, b); 386 (*this)[i] = b; 387 if (result) 388 break; 389 } 390 return result; 391 } 392 393 unittest 394 { 395 debug(bitarray) printf("BitArray.opApply unittest\n"); 396 397 static bool[] ba = [1,0,1]; 398 399 BitArray a; a.init(ba); 400 401 int i; 402 foreach (b;a) 403 { 404 switch (i) 405 { case 0: assert(b == true); break; 406 case 1: assert(b == false); break; 407 case 2: assert(b == true); break; 408 default: assert(0); 409 } 410 i++; 411 } 412 413 foreach (j,b;a) 414 { 415 switch (j) 416 { case 0: assert(b == true); break; 417 case 1: assert(b == false); break; 418 case 2: assert(b == true); break; 419 default: assert(0); 420 } 421 } 421 422 } 422 423 … … 427 428 428 429 BitArray reverse() 429 out (result)430 {431 assert(result == *this);432 }433 body434 {435 if (len >= 2)436 {437 bool t;438 size_t lo, hi;439 440 lo = 0;441 hi = len - 1;442 for (; lo < hi; lo++, hi--)443 {444 t = (*this)[lo];445 (*this)[lo] = (*this)[hi];446 (*this)[hi] = t;447 }448 }449 return *this;450 }451 452 unittest 453 { 454 debug(bitarray) printf("BitArray.reverse.unittest\n");455 456 BitArray b;457 static bool[5] data = [1,0,1,1,0];458 int i;459 460 b.init(data);461 b.reverse;462 for (i = 0; i < data.length; i++)463 {464 assert(b[i] == data[4 - i]);465 }430 out (result) 431 { 432 assert(result == *this); 433 } 434 body 435 { 436 if (len >= 2) 437 { 438 bool t; 439 size_t lo, hi; 440 441 lo = 0; 442 hi = len - 1; 443 for (; lo < hi; lo++, hi--) 444 { 445 t = (*this)[lo]; 446 (*this)[lo] = (*this)[hi]; 447 (*this)[hi] = t; 448 } 449 } 450 return *this; 451 } 452 453 unittest 454 { 455 debug(bitarray) printf("BitArray.reverse.unittest\n"); 456 457 BitArray b; 458 static bool[5] data = [1,0,1,1,0]; 459 int i; 460 461 b.init(data); 462 b.reverse; 463 for (i = 0; i < data.length; i++) 464 { 465 assert(b[i] == data[4 - i]); 466 } 466 467 } 467 468 … … 472 473 473 474 BitArray sort() 474 out (result)475 {476 assert(result == *this);477 }478 body479 {480 if (len >= 2)481 {482 size_t lo, hi;483 484 lo = 0;485 hi = len - 1;486 while (1)487 {488 while (1)489 {490 if (lo >= hi)491 goto Ldone;492 if ((*this)[lo] == true)493 break;494 lo++;495 }496 497 while (1)498 {499 if (lo >= hi)500 goto Ldone;501 if ((*this)[hi] == false)502 break;503 hi--;504 }505 506 (*this)[lo] = false;507 (*this)[hi] = true;508 509 lo++;510 hi--;511 }512 Ldone:513 ;514 }515 return *this;516 }517 518 unittest 519 { 520 debug(bitarray) printf("BitArray.sort.unittest\n");521 522 static uint x = 0b1100011000;523 static BitArray ba = { 10, &x };524 ba.sort;525 for (size_t i = 0; i < 6; i++)526 assert(ba[i] == false);527 for (size_t i = 6; i < 10; i++)528 assert(ba[i] == true);475 out (result) 476 { 477 assert(result == *this); 478 } 479 body 480 { 481 if (len >= 2) 482 { 483 size_t lo, hi; 484 485 lo = 0; 486 hi = len - 1; 487 while (1) 488 { 489 while (1) 490 { 491 if (lo >= hi) 492 goto Ldone; 493 if ((*this)[lo] == true) 494 break; 495 lo++; 496 } 497 498 while (1) 499 { 500 if (lo >= hi) 501 goto Ldone; 502 if ((*this)[hi] == false) 503 break; 504 hi--; 505 } 506 507 (*this)[lo] = false; 508 (*this)[hi] = true; 509 510 lo++; 511 hi--; 512 } 513 Ldone: 514 ; 515 } 516 return *this; 517 } 518 519 unittest 520 { 521 debug(bitarray) printf("BitArray.sort.unittest\n"); 522 523 static uint x = 0b1100011000; 524 static BitArray ba = { 10, &x }; 525 ba.sort; 526 for (size_t i = 0; i < 6; i++) 527 assert(ba[i] == false); 528 for (size_t i = 6; i < 10; i++) 529 assert(ba[i] == true); 529 530 } 530 531 … … 537 538 { int i; 538 539 539 if (this.length != a2.length)540 return 0;// not equal541 byte *p1 = cast(byte*)this.ptr;542 byte *p2 = cast(byte*)a2.ptr;543 uint n = this.length / 8;544 for (i = 0; i < n; i++)545 {546 if (p1[i] != p2[i])547 return 0;// not equal548 }549 550 ubyte mask;551 552 n = this.length & 7;553 mask = cast(ubyte)((1 << n) - 1);554 //printf("i = %d, n = %d, mask = %x, %x, %x\n", i, n, mask, p1[i], p2[i]);555 return (mask == 0) || (p1[i] & mask) == (p2[i] & mask);556 } 557 558 unittest 559 { 560 debug(bitarray) printf("BitArray.opEquals unittest\n");561 562 static bool[] ba = [1,0,1,0,1];563 static bool[] bb = [1,0,1];564 static bool[] bc = [1,0,1,0,1,0,1];565 static bool[] bd = [1,0,1,1,1];566 static bool[] be = [1,0,1,0,1];567 568 BitArray a; a.init(ba);569 BitArray b; b.init(bb);570 BitArray c; c.init(bc);571 BitArray d; d.init(bd);572 BitArray e; e.init(be);573 574 assert(a != b);575 assert(a != c);576 assert(a != d);577 assert(a == e);540 if (this.length != a2.length) 541 return 0; // not equal 542 byte *p1 = cast(byte*)this.ptr; 543 byte *p2 = cast(byte*)a2.ptr; 544 uint n = this.length / 8; 545 for (i = 0; i < n; i++) 546 { 547 if (p1[i] != p2[i]) 548 return 0; // not equal 549 } 550 551 ubyte mask; 552 553 n = this.length & 7; 554 mask = cast(ubyte)((1 << n) - 1); 555 //printf("i = %d, n = %d, mask = %x, %x, %x\n", i, n, mask, p1[i], p2[i]); 556 return (mask == 0) || (p1[i] & mask) == (p2[i] & mask); 557 } 558 559 unittest 560 { 561 debug(bitarray) printf("BitArray.opEquals unittest\n"); 562 563 static bool[] ba = [1,0,1,0,1]; 564 static bool[] bb = [1,0,1]; 565 static bool[] bc = [1,0,1,0,1,0,1]; 566 static bool[] bd = [1,0,1,1,1]; 567 static bool[] be = [1,0,1,0,1]; 568 569 BitArray a; a.init(ba); 570 BitArray b; b.init(bb); 571 BitArray c; c.init(bc); 572 BitArray d; d.init(bd); 573 BitArray e; e.init(be); 574 575 assert(a != b); 576 assert(a != c); 577 assert(a != d); 578 assert(a == e); 578 579 } 579 580 … … 584 585 int opCmp(BitArray a2) 585 586 { 586 uint len;587 uint i;588 589 len = this.length;590 if (a2.length < len)591 len = a2.length;592 ubyte* p1 = cast(ubyte*)this.ptr;593 ubyte* p2 = cast(ubyte*)a2.ptr;594 uint n = len / 8;595 for (i = 0; i < n; i++)596 {597 if (p1[i] != p2[i])598 break;// not equal599 }600 for (uint j = i * 8; j < len; j++)601 { ubyte mask = cast(ubyte)(1 << j);602 int c;603 604 c = cast(int)(p1[i] & mask) - cast(int)(p2[i] & mask);605 if (c)606 return c;607 }608 return cast(int)this.len - cast(int)a2.length;609 } 610 611 unittest 612 { 613 debug(bitarray) printf("BitArray.opCmp unittest\n");614 615 static bool[] ba = [1,0,1,0,1];616 static bool[] bb = [1,0,1];617 static bool[] bc = [1,0,1,0,1,0,1];618 static bool[] bd = [1,0,1,1,1];619 static bool[] be = [1,0,1,0,1];620 621 BitArray a; a.init(ba);622 BitArray b; b.init(bb);623 BitArray c; c.init(bc);624 BitArray d; d.init(bd);625 BitArray e; e.init(be);626 627 assert(a > b);628 assert(a >= b);629 assert(a < c);630 assert(a <= c);631 assert(a < d);632 assert(a <= d);633 assert(a == e);634 assert(a <= e);635 assert(a >= e);587 uint len; 588 uint i; 589 590 len = this.length; 591 if (a2.length < len) 592 len = a2.length; 593 ubyte* p1 = cast(ubyte*)this.ptr; 594 ubyte* p2 = cast(ubyte*)a2.ptr; 595 uint n = len / 8; 596 for (i = 0; i < n; i++) 597 { 598 if (p1[i] != p2[i]) 599 break; // not equal 600 } 601 for (uint j = i * 8; j < len; j++) 602 { ubyte mask = cast(ubyte)(1 << j); 603 int c; 604 605 c = cast(int)(p1[i] & mask) - cast(int)(p2[i] & mask); 606 if (c) 607 return c; 608 } 609 return cast(int)this.len - cast(int)a2.length; 610 } 611 612 unittest 613 { 614 debug(bitarray) printf("BitArray.opCmp unittest\n"); 615 616 static bool[] ba = [1,0,1,0,1]; 617 static bool[] bb = [1,0,1]; 618 static bool[] bc = [1,0,1,0,1,0,1]; 619 static bool[] bd = [1,0,1,1,1]; 620 static bool[] be = [1,0,1,0,1]; 621 622 BitArray a; a.init(ba); 623 BitArray b; b.init(bb); 624 BitArray c; c.init(bc); 625 BitArray d; d.init(bd); 626 BitArray e; e.init(be); 627 628 assert(a > b); 629 assert(a >= b); 630 assert(a < c); 631 assert(a <= c); 632 assert(a < d); 633 assert(a <= d); 634 assert(a == e); 635 assert(a <= e); 636 assert(a >= e); 636 637 } 637 638 … … 642 643 void init(bool[] ba) 643 644 { 644 length = ba.length;645 foreach (i, b; ba)646 {647 (*this)[i] = b;648 }645 length = ba.length; 646 foreach (i, b; ba) 647 { 648 (*this)[i] = b; 649 } 649 650 } 650 651 … … 659 660 in 660 661 { 661 assert(numbits <= v.length * 8);662 assert((v.length & 3) == 0);662 assert(numbits <= v.length * 8); 663 assert((v.length & 3) == 0); 663 664 } 664 665 body 665 666 { 666 ptr = cast(uint*)v.ptr;667 len = numbits;668 } 669 670 unittest 671 { 672 debug(bitarray) printf("BitArray.init unittest\n");673 674 static bool[] ba = [1,0,1,0,1];675 676 BitArray a; a.init(ba);677 BitArray b;678 void[] v;679 680 v = cast(void[])a;681 b.init(v, a.length);682 683 assert(b[0] == 1);684 assert(b[1] == 0);685 assert(b[2] == 1);686 assert(b[3] == 0);687 assert(b[4] == 1);688 689 a[0] = 0;690 assert(b[0] == 0);691 692 assert(a == b);667 ptr = cast(uint*)v.ptr; 668 len = numbits; 669 } 670 671 unittest 672 { 673 debug(bitarray) printf("BitArray.init unittest\n"); 674 675 static bool[] ba = [1,0,1,0,1]; 676 677 BitArray a; a.init(ba); 678 BitArray b; 679 void[] v; 680 681 v = cast(void[])a; 682 b.init(v, a.length); 683 684 assert(b[0] == 1); 685 assert(b[1] == 0); 686 assert(b[2] == 1); 687 assert(b[3] == 0); 688 assert(b[4] == 1); 689 690 a[0] = 0; 691 assert(b[0] == 0); 692 693 assert(a == b); 693 694 } 694 695 … … 698 699 void[] opCast() 699 700 { 700 return cast(void[])ptr[0 .. dim];701 } 702 703 unittest 704 { 705 debug(bitarray) printf("BitArray.opCast unittest\n");706 707 static bool[] ba = [1,0,1,0,1];708 709 BitArray a; a.init(ba);710 void[] v = cast(void[])a;711 712 assert(v.length == a.dim * uint.sizeof);701 return cast(void[])ptr[0 .. dim]; 702 } 703 704 unittest 705 { 706 debug(bitarray) printf("BitArray.opCast unittest\n"); 707 708 static bool[] ba = [1,0,1,0,1]; 709 710 BitArray a; a.init(ba); 711 void[] v = cast(void[])a; 712 713 assert(v.length == a.dim * uint.sizeof); 713 714 } 714 715 … … 718 719 BitArray opCom() 719 720 { 720 auto dim = this.dim();721 722 BitArray result;723 724 result.length = len;725 for (size_t i = 0; i < dim; i++)726 result.ptr[i] = ~this.ptr[i];727 if (len & 31)728 result.ptr[dim - 1] &= ~(~0 << (len & 31));729 return result;730 } 731 732 unittest 733 { 734 debug(bitarray) printf("BitArray.opCom unittest\n");735 736 static bool[] ba = [1,0,1,0,1];737 738 BitArray a; a.init(ba);739 BitArray b = ~a;740 741 assert(b[0] == 0);742 assert(b[1] == 1);743 assert(b[2] == 0);744 assert(b[3] == 1);745 assert(b[4] == 0);721 auto dim = this.dim(); 722 723 BitArray result; 724 725 result.length = len; 726 for (size_t i = 0; i < dim; i++) 727 result.ptr[i] = ~this.ptr[i]; 728 if (len & 31) 729 result.ptr[dim - 1] &= ~(~0 << (len & 31)); 730 return result; 731 } 732 733 unittest 734 { 735 debug(bitarray) printf("BitArray.opCom unittest\n"); 736 737 static bool[] ba = [1,0,1,0,1]; 738 739 BitArray a; a.init(ba); 740 BitArray b = ~a; 741 742 assert(b[0] == 0); 743 assert(b[1] == 1); 744 assert(b[2] == 0); 745 assert(b[3] == 1); 746 assert(b[4] == 0); 746 747 } 747 748 … … 753 754 in 754 755 { 755 assert(len == e2.length);756 assert(len == e2.length); 756 757 } 757 758 body 758 759 { 759 auto dim = this.dim();760 761 BitArray result;762 763 result.length = len;764 for (size_t i = 0; i < dim; i++)765 result.ptr[i] = this.ptr[i] & e2.ptr[i];766 return result;767 } 768 769 unittest 770 { 771 debug(bitarray) printf("BitArray.opAnd unittest\n");772 773 static bool[] ba = [1,0,1,0,1];774 static bool[] bb = [1,0,1,1,0];775 776 BitArray a; a.init(ba);777 BitArray b; b.init(bb);778 779 BitArray c = a & b;780 781 assert(c[0] == 1);782 assert(c[1] == 0);783 assert(c[2] == 1);784 assert(c[3] == 0);785 assert(c[4] == 0);760 auto dim = this.dim(); 761 762 BitArray result; 763 764 result.length = len; 765 for (size_t i = 0; i < dim; i++) 766 result.ptr[i] = this.ptr[i] & e2.ptr[i]; 767 return result; 768 } 769 770 unittest 771 { 772 debug(bitarray) printf("BitArray.opAnd unittest\n"); 773 774 static bool[] ba = [1,0,1,0,1]; 775 static bool[] bb = [1,0,1,1,0]; 776 777 BitArray a; a.init(ba); 778 BitArray b; b.init(bb); 779 780 BitArray c = a & b; 781 782 assert(c[0] == 1); 783 assert(c[1] == 0); 784 assert(c[2] == 1); 785 assert(c[3] == 0); 786 assert(c[4] == 0); 786 787 } 787 788 … … 793 794 in 794 795 { 795 assert(len == e2.length);796 assert(len == e2.length); 796 797 } 797 798 body 798 799 { 799 auto dim = this.dim();800 801 BitArray result;802 803 result.length = len;804 for (size_t i = 0; i < dim; i++)805 result.ptr[i] = this.ptr[i] | e2.ptr[i];806 return result;807 } 808 809 unittest 810 { 811 debug(bitarray) printf("BitArray.opOr unittest\n");812 813 static bool[] ba = [1,0,1,0,1];814 static bool[] bb = [1,0,1,1,0];815 816 BitArray a; a.init(ba);817 BitArray b; b.init(bb);818 819 BitArray c = a | b;820 821 assert(c[0] == 1);822 assert(c[1] == 0);823 assert(c[2] == 1);824 assert(c[3] == 1);825 assert(c[4] == 1);800 auto dim = this.dim(); 801 802 BitArray result; 803 804 result.length = len; 805 for (size_t i = 0; i < dim; i++) 806 result.ptr[i] = this.ptr[i] | e2.ptr[i]; 807 return result; 808 } 809 810 unittest 811 { 812 debug(bitarray) printf("BitArray.opOr unittest\n"); 813 814 static bool[] ba = [1,0,1,0,1]; 815 static bool[] bb = [1,0,1,1,0]; 816 817 BitArray a; a.init(ba); 818 BitArray b; b.init(bb); 819 820 BitArray c = a | b; 821 822 assert(c[0] == 1); 823 assert(c[1] == 0); 824 assert(c[2] == 1); 825 assert(c[3] == 1); 826 assert(c[4] == 1); 826 827 } 827 828 … … 833 834 in 834 835 { 835 assert(len == e2.length);836 assert(len == e2.length); 836 837 } 837 838 body 838 839 { 839 auto dim = this.dim();840 841 BitArray result;842 843 result.length = len;844 for (size_t i = 0; i < dim; i++)845 result.ptr[i] = this.ptr[i] ^ e2.ptr[i];846 return result;847 } 848 849 unittest 850 { 851 debug(bitarray) printf("BitArray.opXor unittest\n");852 853 static bool[] ba = [1,0,1,0,1];854 static bool[] bb = [1,0,1,1,0];855 856 BitArray a; a.init(ba);857 BitArray b; b.init(bb);858 859 BitArray c = a ^ b;860 861 assert(c[0] == 0);862 assert(c[1] == 0);863 assert(c[2] == 0);864 assert(c[3] == 1);865 assert(c[4] == 1);840 auto dim = this.dim(); 841 842 BitArray result; 843 844 result.length = len; 845 for (size_t i = 0; i < dim; i++) 846 result.ptr[i] = this.ptr[i] ^ e2.ptr[i]; 847 return result; 848 } 849 850 unittest 851 { 852 debug(bitarray) printf("BitArray.opXor unittest\n"); 853 854 static bool[] ba = [1,0,1,0,1]; 855 static bool[] bb = [1,0,1,1,0]; 856 857 BitArray a; a.init(ba); 858 BitArray b; b.init(bb); 859 860 BitArray c = a ^ b; 861 862 assert(c[0] == 0); 863 assert(c[1] == 0); 864 assert(c[2] == 0); 865 assert(c[3] == 1); 866 assert(c[4] == 1);
