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.
		
		
		
		
		
			
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			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
 | 
						|
}
 |