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