72 lines
2.2 KiB
Swift
72 lines
2.2 KiB
Swift
//
|
|
// Copyright 2024 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import Foundation
|
|
import XCTest
|
|
|
|
@testable import SignalServiceKit
|
|
|
|
class ArraySSKTests: XCTestCase {
|
|
|
|
func testForEachChunk_empty() async {
|
|
// Empty should do nothing
|
|
await [].forEachChunk(chunkSize: 100) { _ in XCTFail("should be empty") }
|
|
}
|
|
|
|
func testForEachChunk_smallerThanChunkSize() async {
|
|
var numChunks = 0
|
|
await (1...10).forEachChunk(chunkSize: 100) { chunk in
|
|
XCTAssertEqual(chunk.count, 10)
|
|
numChunks += 1
|
|
}
|
|
XCTAssertEqual(numChunks, 1)
|
|
numChunks = 0
|
|
}
|
|
|
|
func testForEachChunk_multipleOfChunkSize() async {
|
|
var numChunks = 0
|
|
await (1...100).forEachChunk(chunkSize: 10) { chunk in
|
|
XCTAssertEqual(chunk.count, 10)
|
|
numChunks += 1
|
|
}
|
|
XCTAssertEqual(numChunks, 10)
|
|
}
|
|
|
|
func testForEachChunk_nonMultipleOfChunkSize() async {
|
|
var numChunks = 0
|
|
let input = (1...35)
|
|
await input.forEachChunk(chunkSize: 10) { chunk in
|
|
if numChunks == 3 {
|
|
XCTAssertEqual(chunk.endIndex, input.endIndex)
|
|
XCTAssertEqual(Array(chunk), [31, 32, 33, 34, 35])
|
|
} else {
|
|
XCTAssertNotEqual(chunk.endIndex, input.endIndex)
|
|
XCTAssertEqual(chunk.count, 10)
|
|
}
|
|
numChunks += 1
|
|
}
|
|
XCTAssertEqual(numChunks, 4)
|
|
}
|
|
|
|
func testForEachChunk_arraySlice() async {
|
|
var numChunks = 0
|
|
let array = Array(1...100)
|
|
let input = array[30..<81]
|
|
await input.forEachChunk(chunkSize: 10) { chunk in
|
|
if numChunks == 0 {
|
|
XCTAssertEqual(chunk.startIndex, input.startIndex)
|
|
XCTAssertEqual(chunk.count, 10)
|
|
} else if numChunks == 5 {
|
|
XCTAssertEqual(chunk.endIndex, input.endIndex)
|
|
XCTAssertEqual(Array(chunk), [81])
|
|
} else {
|
|
XCTAssertNotEqual(chunk.endIndex, input.endIndex)
|
|
XCTAssertEqual(chunk.count, 10)
|
|
}
|
|
numChunks += 1
|
|
}
|
|
XCTAssertEqual(numChunks, 6)
|
|
}
|
|
}
|