| import Std.Data.ByteSlice | |
| -- Test data | |
| def ba := ByteArray.mk #[1,2,3,4,5,6,7,8,9,10] | |
| def bb := ByteArray.mk #[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10] | |
| def emptyArray := ByteArray.mk #[] | |
| def singleByte := ByteArray.mk #[42] | |
| -- Basic slicing tests (existing) | |
| /-- | |
| info: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
| -/ | |
| #guard_msgs in | |
| #eval bb[10...20] |>.toByteArray | |
| /-- | |
| info: [3, 4] | |
| -/ | |
| #guard_msgs in | |
| #eval bb[10...20][2...4] |>.toByteArray | |
| /-- | |
| info: 4 | |
| -/ | |
| #guard_msgs in | |
| #eval bb[10...20][2...4] |>.get! 1 | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval bb[10...20][2...4] |>.contains 4 | |
| -- Size function tests | |
| /-- | |
| info: 10 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.size | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval emptyArray.toByteSlice.size | |
| /-- | |
| info: 1 | |
| -/ | |
| #guard_msgs in | |
| #eval singleByte.toByteSlice.size | |
| /-- | |
| info: 5 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[2...7].size | |
| -- Element access tests | |
| /-- | |
| info: 1 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...5][0]! | |
| /-- | |
| info: 5 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...5][4]! | |
| -- getD (get with default) tests | |
| /-- | |
| info: 3 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.getD 2 99 | |
| /-- | |
| info: 99 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.getD 15 99 | |
| /-- | |
| info: 255 | |
| -/ | |
| #guard_msgs in | |
| #eval emptyArray.toByteSlice.getD 0 255 | |
| -- get! tests (with bounds checking) | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.get! 15 | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval emptyArray.toByteSlice.get! 0 | |
| /-- | |
| info: 42 | |
| -/ | |
| #guard_msgs in | |
| #eval singleByte.toByteSlice.get! 0 | |
| -- Contains function tests | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.contains 5 | |
| /-- | |
| info: false | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.contains 15 | |
| /-- | |
| info: false | |
| -/ | |
| #guard_msgs in | |
| #eval emptyArray.toByteSlice.contains 1 | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval bb[5...15].contains 10 | |
| -- Equality tests | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...5] == ba[0...5] | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...3].toByteArray == bb[0...3].toByteArray | |
| /-- | |
| info: false | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...3] == ba[1...4] | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval ByteSlice.empty == emptyArray.toByteSlice | |
| -- Edge case: empty slices | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval ByteSlice.empty.size | |
| /-- | |
| info: [] | |
| -/ | |
| #guard_msgs in | |
| #eval ByteSlice.empty.toByteArray | |
| /-- | |
| info: false | |
| -/ | |
| #guard_msgs in | |
| #eval ByteSlice.empty.contains 0 | |
| -- Edge case: slice bounds clamping | |
| /-- | |
| info: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...100].toByteArray | |
| /-- | |
| info: [] | |
| -/ | |
| #guard_msgs in | |
| #eval ba[100...200].toByteArray | |
| /-- | |
| info: [6, 7, 8, 9, 10] | |
| -/ | |
| #guard_msgs in | |
| #eval ba[5...100].toByteArray | |
| -- Foldr function tests | |
| /-- | |
| info: 55 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.foldr (fun b acc => b.toNat + acc) 0 | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval ByteSlice.empty.foldr (fun b acc => b.toNat + acc) 0 | |
| /-- | |
| info: 42 | |
| -/ | |
| #guard_msgs in | |
| #eval singleByte.toByteSlice.foldr (fun b acc => b.toNat + acc) 0 | |
| -- Nested slicing with element access | |
| /-- | |
| info: 7 | |
| -/ | |
| #guard_msgs in | |
| #eval bb[0...10][5...8][1]! | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval bb[0...10][5...8].contains 6 | |
| /-- | |
| info: false | |
| -/ | |
| #guard_msgs in | |
| #eval bb[0...10][5...8].contains 5 | |
| -- Size consistency tests | |
| /-- | |
| info: 3 | |
| -/ | |
| #guard_msgs in | |
| #eval bb[0...10][5...8].size | |
| /-- | |
| info: 5 | |
| -/ | |
| #guard_msgs in | |
| #eval bb[5...15][0...5].size | |
| -- Boundary testing with single elements | |
| /-- | |
| info: [10] | |
| -/ | |
| #guard_msgs in | |
| #eval ba[9...10].toByteArray | |
| /-- | |
| info: 1 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[9...10].size | |
| /-- | |
| info: 10 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[9...10][0]! | |
| -- Out of bounds slice handling | |
| /-- | |
| info: [] | |
| -/ | |
| #guard_msgs in | |
| #eval ba[15...20].toByteArray | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[15...20].size | |
| /-- | |
| info: [] | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.slice 8 3 |>.toByteArray | |
| /-- | |
| info: 0 | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.slice 8 3 |>.size | |
| /-- | |
| info: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |
| -/ | |
| #guard_msgs in | |
| #eval ba.toByteSlice.slice 0 10 |>.toByteArray | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval bb[0...10] == bb[10...20] | |
| /-- | |
| info: [1, 2, 3] | |
| -/ | |
| #guard_msgs in | |
| #eval bb[10...13].toByteArray | |
| -- Testing with different default values in getD | |
| /-- | |
| info: 128 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...3].getD 10 128 | |
| /-- | |
| info: 2 | |
| -/ | |
| #guard_msgs in | |
| #eval ba[0...3].getD 1 128 | |
| def maxByteArray := ByteArray.mk #[255, 0, 128, 1] | |
| /-- | |
| info: true | |
| -/ | |
| #guard_msgs in | |
| #eval maxByteArray.toByteSlice.contains 255 | |
| /-- | |
| info: 384 | |
| -/ | |
| #guard_msgs in | |
| #eval maxByteArray.toByteSlice.foldr (fun b acc => b.toNat + acc) 0 | |
| /-- | |
| info: [255, 0] | |
| -/ | |
| #guard_msgs in | |
| #eval maxByteArray[0...2].toByteArray |