session-ios/SessionUtilitiesKitTests/General/ArrayUtilitiesSpec.swift

90 lines
3.9 KiB
Swift

// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import Quick
import Nimble
@testable import SessionUtilitiesKit
class ArrayUtilitiesSpec: QuickSpec {
override class func spec() {
// MARK: - an Array
describe("an Array") {
// MARK: -- when grouping
context("when grouping") {
// MARK: ---- maintains the original array ordering
it("maintains the original array ordering") {
let data: [TestType] = [
TestType(stringValue: "b", intValue: 5),
TestType(stringValue: "A", intValue: 2),
TestType(stringValue: "z", intValue: 1),
TestType(stringValue: "x", intValue: 3),
TestType(stringValue: "7", intValue: 6),
TestType(stringValue: "A", intValue: 7),
TestType(stringValue: "z", intValue: 8),
TestType(stringValue: "7", intValue: 9),
TestType(stringValue: "7", intValue: 4),
TestType(stringValue: "h", intValue: 2),
TestType(stringValue: "z", intValue: 1),
TestType(stringValue: "m", intValue: 2)
]
let result1: [String: [TestType]] = data.grouped(by: \.stringValue)
let result2: [Int: [TestType]] = data.grouped(by: \.intValue)
expect(result1).to(equal(
[
"b": [TestType(stringValue: "b", intValue: 5)],
"A": [
TestType(stringValue: "A", intValue: 2),
TestType(stringValue: "A", intValue: 7)
],
"z": [
TestType(stringValue: "z", intValue: 1),
TestType(stringValue: "z", intValue: 8),
TestType(stringValue: "z", intValue: 1)
],
"x": [TestType(stringValue: "x", intValue: 3)],
"7": [
TestType(stringValue: "7", intValue: 6),
TestType(stringValue: "7", intValue: 9),
TestType(stringValue: "7", intValue: 4)
],
"h": [TestType(stringValue: "h", intValue: 2)],
"m": [TestType(stringValue: "m", intValue: 2)]
]
))
expect(result2).to(equal(
[
1: [
TestType(stringValue: "z", intValue: 1),
TestType(stringValue: "z", intValue: 1),
],
2: [
TestType(stringValue: "A", intValue: 2),
TestType(stringValue: "h", intValue: 2),
TestType(stringValue: "m", intValue: 2)
],
3: [TestType(stringValue: "x", intValue: 3)],
4: [TestType(stringValue: "7", intValue: 4)],
5: [TestType(stringValue: "b", intValue: 5)],
6: [TestType(stringValue: "7", intValue: 6)],
7: [TestType(stringValue: "A", intValue: 7)],
9: [TestType(stringValue: "7", intValue: 9)],
8: [TestType(stringValue: "z", intValue: 8)]
]
))
}
}
}
}
}
// MARK: - Test Types
fileprivate struct TestType: Equatable {
let stringValue: String
let intValue: Int
}