 |
Changeset 3196
- Timestamp:
- 02/16/08 01:32:13
(10 months ago)
- Author:
- DRK
- Message:
Fixed Variant, and added some unit tests to make sure there aren't regressions. Closes #654
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r3145 |
r3196 |
|
| 273 | 273 | else static if( isPointer!(T) ) |
|---|
| 274 | 274 | { |
|---|
| 275 | | this.value.ptr = cast(void*)T; |
|---|
| | 275 | this.value.ptr = cast(void*)value; |
|---|
| 276 | 276 | } |
|---|
| 277 | 277 | else static if( isObject!(T) ) |
|---|
| 278 | 278 | { |
|---|
| 279 | | this.value.obj = T; |
|---|
| | 279 | this.value.obj = value; |
|---|
| 280 | 280 | } |
|---|
| 281 | 281 | else |
|---|
| … | … | |
| 571 | 571 | assert( v.isEmpty, v.type.toString ); |
|---|
| 572 | 572 | |
|---|
| | 573 | // Test basic integer storage and implicit casting support |
|---|
| 573 | 574 | v = 42; |
|---|
| 574 | 575 | assert( v.isA!(int), v.type.toString ); |
|---|
| … | … | |
| 580 | 581 | assert( v.get!(ulong) == 42uL ); |
|---|
| 581 | 582 | |
|---|
| | 583 | // Test clearing |
|---|
| 582 | 584 | v.clear; |
|---|
| 583 | 585 | assert( v.isA!(void), v.type.toString ); |
|---|
| 584 | 586 | assert( v.isEmpty, v.type.toString ); |
|---|
| 585 | 587 | |
|---|
| | 588 | // Test strings |
|---|
| 586 | 589 | v = "Hello, World!"c; |
|---|
| 587 | 590 | assert( v.isA!(char[]), v.type.toString ); |
|---|
| … | … | |
| 589 | 592 | assert( v.get!(char[]) == "Hello, World!" ); |
|---|
| 590 | 593 | |
|---|
| | 594 | // Test array storage |
|---|
| 591 | 595 | v = [1,2,3,4,5]; |
|---|
| 592 | 596 | assert( v.isA!(int[]), v.type.toString ); |
|---|
| 593 | 597 | assert( v.get!(int[]) == [1,2,3,4,5] ); |
|---|
| 594 | 598 | |
|---|
| | 599 | // Test pointer storage |
|---|
| | 600 | v = &v; |
|---|
| | 601 | assert( v.isA!(Variant*), v.type.toString ); |
|---|
| | 602 | assert( !v.isImplicitly!(int*), v.type.toString ); |
|---|
| | 603 | // NB: we *should* be able to implicitly cast any pointer to a void*; |
|---|
| | 604 | // I'm just not sure how to do it right now. This test will catch |
|---|
| | 605 | // once it works, and remind us to switch the assert around. |
|---|
| | 606 | assert( !v.isImplicitly!(void*), "see above comment in source" ); |
|---|
| | 607 | assert( v.get!(Variant*) == &v ); |
|---|
| | 608 | |
|---|
| | 609 | // Test object storage |
|---|
| | 610 | { |
|---|
| | 611 | scope o = new Object; |
|---|
| | 612 | v = o; |
|---|
| | 613 | assert( v.isA!(Object), v.type.toString ); |
|---|
| | 614 | assert( v.get!(Object) is o ); |
|---|
| | 615 | } |
|---|
| | 616 | |
|---|
| | 617 | // Test doubles and implicit casting |
|---|
| 595 | 618 | v = 3.1413; |
|---|
| 596 | 619 | assert( v.isA!(double), v.type.toString ); |
|---|
| … | … | |
| 599 | 622 | assert( v.get!(double) == 3.1413 ); |
|---|
| 600 | 623 | |
|---|
| | 624 | // Test storage transitivity |
|---|
| 601 | 625 | auto u = Variant(v); |
|---|
| 602 | 626 | assert( u.isA!(double), u.type.toString ); |
|---|
| 603 | 627 | assert( u.get!(double) == 3.1413 ); |
|---|
| 604 | 628 | |
|---|
| | 629 | // Test operators |
|---|
| 605 | 630 | v = 38; |
|---|
| 606 | 631 | assert( v + 4 == 42 ); |
|---|
| … | … | |
| 628 | 653 | assert( "abc" ~ Variant("def") == "abcdef" ); |
|---|
| 629 | 654 | |
|---|
| | 655 | // Test op= operators |
|---|
| 630 | 656 | v = 38; v += 4; assert( v == 42 ); |
|---|
| 631 | 657 | v = 38; v -= 4; assert( v == 34 ); |
|---|
| … | … | |
| 641 | 667 | v = "abc"; v ~= "def"; assert( v == "abcdef" ); |
|---|
| 642 | 668 | |
|---|
| | 669 | // Test comparison |
|---|
| 643 | 670 | assert( Variant(0) < Variant(42) ); |
|---|
| 644 | 671 | assert( Variant(42) > Variant(0) ); |
|---|
| … | … | |
| 647 | 674 | assert( Variant("bar") == Variant("bar") ); |
|---|
| 648 | 675 | assert( Variant("foo") != Variant("bar") ); |
|---|
| | 676 | |
|---|
| | 677 | // Test variants as AA keys |
|---|
| 649 | 678 | { |
|---|
| 650 | 679 | auto v1 = Variant(42); |
|---|
| … | … | |
| 661 | 690 | assert( hash[v3] == 2 ); |
|---|
| 662 | 691 | } |
|---|
| | 692 | |
|---|
| | 693 | // Test AA storage |
|---|
| 663 | 694 | { |
|---|
| 664 | 695 | int[char[]] hash; |
|---|
Download in other formats:
|
 |
 |
|
 |
Copyright © 2006-2008 Tango. All Rights Reserved. | Page Width:
Static or
Dynamic