TM-SGNL-iOS/SignalServiceKit/tests/Util/Array+SSKTest.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

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)
}
}