|
| 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 =========
|
@@ -63,6 +66,14 @@ fn test_byte_array_33() -> ByteArray {
|
63 | 66 | ba2
|
64 | 67 | }
|
65 | 68 |
|
| 69 | +fn test_byte_array_64() -> ByteArray { |
| 70 | + let mut ba3 = Default::default(); |
| 71 | + ba3.append_word(0x0102030405060708091a0b0c0d0e0f101112131415161718191a1b1c1d1e1f, 31); |
| 72 | + ba3.append_word(0x202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e, 31); |
| 73 | + ba3.append_word(0x3f40, 2); |
| 74 | + ba3 |
| 75 | +} |
| 76 | + |
66 | 77 | // ========= Tests =========
|
67 | 78 |
|
68 | 79 | #[test]
|
@@ -527,3 +538,47 @@ fn test_from_collect() {
|
527 | 538 | let ba: ByteArray = array!['h', 'e', 'l', 'l', 'o'].into_iter().collect();
|
528 | 539 | assert_eq!(ba, "hello");
|
529 | 540 | }
|
| 541 | + |
| 542 | + |
| 543 | +#[test] |
| 544 | +fn test_span_len() { |
| 545 | + // Test simple happy flow --- value is included in the last word. |
| 546 | + // TODO(giladchase): add short string test here once supported cast into span. |
| 547 | + let ba = test_byte_array_1(); |
| 548 | + let span = ba.span(); |
| 549 | + assert_eq(@span.len(), @1, 'wrong span len'); |
| 550 | + assert!(!span.is_empty()); |
| 551 | + |
| 552 | + // Test empty. |
| 553 | + let empty_ba: ByteArray = Default::default(); |
| 554 | + let empty_span = empty_ba.span(); |
| 555 | + assert_eq(@empty_span.len(), @0, 'empty span len != 0'); |
| 556 | + assert!(empty_span.is_empty()); |
| 557 | + |
| 558 | + // First word in the array + start offset, second in last word. |
| 559 | + let two_byte31 = test_byte_array_33(); |
| 560 | + let mut single_span = two_byte31.span(); |
| 561 | + // TODO(giladchase): use slice once supported. |
| 562 | + single_span.first_char_start_offset = 1; |
| 563 | + |
| 564 | + assert_eq(@single_span.len(), @32, 'len error with start offset'); |
| 565 | + assert!(!single_span.is_empty()); |
| 566 | + |
| 567 | + // First word in the array + start offset, second in the array, third in last word. |
| 568 | + let three_bytes31 = test_byte_array_64(); |
| 569 | + let mut three_span = three_bytes31.span(); |
| 570 | + three_span.first_char_start_offset = 1; |
| 571 | + assert_eq(@three_span.len(), @63, 'len error with size-3 bytearray'); |
| 572 | + assert!(!three_span.is_empty()); |
| 573 | +} |
| 574 | + |
| 575 | +#[test] |
| 576 | +fn test_span_copy() { |
| 577 | + let ba = test_byte_array_2(); |
| 578 | + let span = ba.span(); |
| 579 | + assert_eq(@span.len(), @2, 'wrong span len'); |
| 580 | + |
| 581 | + let other_span = span; |
| 582 | + assert_eq(@other_span.len(), @2, 'span len is equal to Copy'); |
| 583 | + assert_eq(@other_span.len(), @span.len(), 'original span still usable'); |
| 584 | +} |
0 commit comments