forked from shadowfacts/Tusker
46 lines
1.1 KiB
Swift
46 lines
1.1 KiB
Swift
|
//
|
||
|
// ArrayUniqueTests.swift
|
||
|
// TuskerTests
|
||
|
//
|
||
|
// Created by Shadowfacts on 1/1/23.
|
||
|
// Copyright © 2023 Shadowfacts. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import XCTest
|
||
|
@testable import Tusker
|
||
|
|
||
|
final class ArrayUniqueTests: XCTestCase {
|
||
|
|
||
|
func testUniquesBy() {
|
||
|
let a = Test(string: "test")
|
||
|
let b = Test(string: "test")
|
||
|
XCTAssertNotEqual(a.id, b.id)
|
||
|
XCTAssertNotEqual(a.hashValue, b.hashValue)
|
||
|
XCTAssertEqual([a, b].uniques(by: \.string), [a])
|
||
|
}
|
||
|
|
||
|
class Test: NSObject {
|
||
|
let id = UUID()
|
||
|
let string: String
|
||
|
|
||
|
init(string: String) {
|
||
|
self.string = string
|
||
|
}
|
||
|
|
||
|
override func isEqual(_ object: Any?) -> Bool {
|
||
|
guard let other = object as? Self else {
|
||
|
return false
|
||
|
}
|
||
|
return id == other.id && string == other.string
|
||
|
}
|
||
|
|
||
|
override var hash: Int {
|
||
|
var hasher = Hasher()
|
||
|
hasher.combine(id)
|
||
|
hasher.combine(string)
|
||
|
return hasher.finalize()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|