2015-12-20 02:44:51 +03:00
|
|
|
//
|
|
|
|
// Any+Equatable.swift
|
|
|
|
// Rx
|
|
|
|
//
|
|
|
|
// Created by Krunoslav Zaher on 12/19/15.
|
|
|
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
/**
|
|
|
|
A way to use built in XCTest methods with objects that are partially equatable.
|
|
|
|
|
|
|
|
If this can be done simpler, PRs are welcome :)
|
|
|
|
*/
|
2015-12-20 13:11:08 +03:00
|
|
|
struct AnyEquatable<Target>
|
|
|
|
: Equatable
|
|
|
|
, CustomDebugStringConvertible
|
|
|
|
, CustomStringConvertible {
|
2015-12-20 02:44:51 +03:00
|
|
|
typealias Comparer = (Target, Target) -> Bool
|
|
|
|
|
|
|
|
let _target: Target
|
|
|
|
let _comparer: Comparer
|
|
|
|
|
|
|
|
init(target: Target, comparer: Comparer) {
|
|
|
|
_target = target
|
|
|
|
_comparer = comparer
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func == <T>(lhs: AnyEquatable<T>, rhs: AnyEquatable<T>) -> Bool {
|
|
|
|
return lhs._comparer(lhs._target, rhs._target)
|
2015-12-20 13:11:08 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
extension AnyEquatable {
|
|
|
|
var description: String {
|
|
|
|
return "\(_target)"
|
|
|
|
}
|
|
|
|
|
|
|
|
var debugDescription: String {
|
|
|
|
return "\(_target)"
|
|
|
|
}
|
2015-12-20 02:44:51 +03:00
|
|
|
}
|