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