mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.8 KiB
Swift
87 lines
3.8 KiB
Swift
2 years ago
|
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
|
||
|
|
||
|
import Foundation
|
||
|
|
||
|
import Quick
|
||
|
import Nimble
|
||
|
|
||
|
@testable import SessionUtilitiesKit
|
||
|
|
||
|
class ArrayUtilitiesSpec: QuickSpec {
|
||
|
private struct TestType: Equatable {
|
||
|
let stringValue: String
|
||
|
let intValue: Int
|
||
|
}
|
||
|
|
||
|
// MARK: - Spec
|
||
|
|
||
|
override func spec() {
|
||
|
describe("an Array") {
|
||
|
context("when grouping") {
|
||
|
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)]
|
||
|
]
|
||
|
))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|