|
| 1 | +pub use crate::byte_array::{ |
| 2 | + Span as ByteArraySpan, SpanTrait as ByteArraySpanTrait, ToSpanTrait as ByteArrayToSpanTrait, |
| 3 | +}; |
1 | 4 | use crate::test::test_utils::{assert_eq, assert_ne};
|
2 | 5 |
|
3 | 6 | // ========= Test-utils =========
|
@@ -93,6 +96,14 @@ fn test_byte_array_33() -> ByteArray {
|
93 | 96 | ba2
|
94 | 97 | }
|
95 | 98 |
|
| 99 | +fn test_byte_array_64() -> ByteArray { |
| 100 | + let mut ba3 = Default::default(); |
| 101 | + ba3.append_word(0x0102030405060708091a0b0c0d0e0f101112131415161718191a1b1c1d1e1f, 31); |
| 102 | + ba3.append_word(0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e, 31); |
| 103 | + ba3.append_word(0x3f40, 2); |
| 104 | + ba3 |
| 105 | +} |
| 106 | + |
96 | 107 | // ========= Tests =========
|
97 | 108 |
|
98 | 109 | #[test]
|
@@ -597,3 +608,47 @@ fn test_from_collect() {
|
597 | 608 | let ba: ByteArray = array!['h', 'e', 'l', 'l', 'o'].into_iter().collect();
|
598 | 609 | assert_eq!(ba, "hello");
|
599 | 610 | }
|
| 611 | + |
| 612 | + |
| 613 | +#[test] |
| 614 | +fn test_span_len() { |
| 615 | + // Test simple happy flow --- value is included in the last word. |
| 616 | + // TODO(giladchase): add short string test here once supported cast into span. |
| 617 | + let ba = test_byte_array_1(); |
| 618 | + let span = ba.span(); |
| 619 | + assert_eq(@span.len(), @1, 'wrong span len'); |
| 620 | + assert!(!span.is_empty()); |
| 621 | + |
| 622 | + // Test empty. |
| 623 | + let empty_ba: ByteArray = Default::default(); |
| 624 | + let empty_span = empty_ba.span(); |
| 625 | + assert_eq(@empty_span.len(), @0, 'empty span len != 0'); |
| 626 | + assert!(empty_span.is_empty()); |
| 627 | + |
| 628 | + // First word in the array + start offset, second in last word. |
| 629 | + let two_byte31 = test_byte_array_33(); |
| 630 | + let mut single_span = two_byte31.span(); |
| 631 | + // TODO(giladchase): use slice once supported. |
| 632 | + single_span.first_char_start_offset = 1; |
| 633 | + |
| 634 | + assert_eq(@single_span.len(), @32, 'len error with start offset'); |
| 635 | + assert!(!single_span.is_empty()); |
| 636 | + |
| 637 | + // First word in the array + start offset, second in the array, third in last word. |
| 638 | + let three_bytes31 = test_byte_array_64(); |
| 639 | + let mut three_span = three_bytes31.span(); |
| 640 | + three_span.first_char_start_offset = 1; |
| 641 | + assert_eq(@three_span.len(), @63, 'len error with size-3 bytearray'); |
| 642 | + assert!(!three_span.is_empty()); |
| 643 | +} |
| 644 | + |
| 645 | +#[test] |
| 646 | +fn test_span_copy() { |
| 647 | + let ba = test_byte_array_2(); |
| 648 | + let span = ba.span(); |
| 649 | + assert_eq(@span.len(), @2, 'wrong span len'); |
| 650 | + |
| 651 | + let other_span = span; |
| 652 | + assert_eq(@other_span.len(), @2, 'span len is equal to Copy'); |
| 653 | + assert_eq(@other_span.len(), @span.len(), 'original span still usable'); |
| 654 | +} |
0 commit comments