Add call as function to all sets
This commit is contained in:
parent
eaf1009b2f
commit
414cf2be21
|
@ -34,6 +34,10 @@ extension BinaryCartesianProduct: FuzzySet {
|
|||
public subscript(_ u: U, _ v: V) -> Grade {
|
||||
grade(forElement: (u, v))
|
||||
}
|
||||
|
||||
public func callAsFunction(_ u: U, _ v: V) -> Grade {
|
||||
grade(forElement: (u, v))
|
||||
}
|
||||
}
|
||||
|
||||
extension BinaryCartesianProduct: AnyFuzzySetRepresentable {
|
||||
|
|
|
@ -21,6 +21,10 @@ extension BinaryFuzzyRelation: FuzzySet {
|
|||
public subscript(_ u: U, _ v: V) -> Grade {
|
||||
grade(forElement: (u, v))
|
||||
}
|
||||
|
||||
public func callAsFunction(_ u: U, _ v: V) -> Grade {
|
||||
grade(forElement: (u, v))
|
||||
}
|
||||
}
|
||||
|
||||
extension BinaryFuzzyRelation: AnyFuzzySetRepresentable {
|
||||
|
|
|
@ -63,4 +63,8 @@ extension FuzzyRelationsComposition: FuzzySet {
|
|||
public subscript(_ u: U, _ w: W) -> Grade {
|
||||
grade(forElement: (u, w))
|
||||
}
|
||||
|
||||
public func callAsFunction(_ u: U, _ w: W) -> Grade {
|
||||
grade(forElement: (u, w))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,10 @@ extension HomogenousFuzzyRelation: FuzzySet {
|
|||
public subscript(_ u: U...) -> Grade {
|
||||
grade(forElement: u)
|
||||
}
|
||||
|
||||
public func callAsFunction(_ u: U...) -> Grade {
|
||||
grade(forElement: u)
|
||||
}
|
||||
}
|
||||
|
||||
extension HomogenousFuzzyRelation: AnyFuzzySetRepresentable {
|
||||
|
|
|
@ -21,6 +21,10 @@ extension TernaryFuzzyRelation: FuzzySet {
|
|||
public subscript(_ u: U, _ v: V, _ w: W) -> Grade {
|
||||
grade(forElement: (u, v, w))
|
||||
}
|
||||
|
||||
public func callAsFunction(_ u: U, _ v: V, _ w: W) -> Grade {
|
||||
grade(forElement: (u, v, w))
|
||||
}
|
||||
}
|
||||
|
||||
extension TernaryFuzzyRelation: AnyFuzzySetRepresentable {
|
||||
|
|
|
@ -15,4 +15,8 @@ public extension FuzzySet {
|
|||
grade(forElement: element)
|
||||
}
|
||||
}
|
||||
|
||||
func callAsFunction(_ element: Universe) -> Grade {
|
||||
grade(forElement: element)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import XCTest
|
||||
import FuzzySets
|
||||
|
||||
func XCTAssertApproximatelyEqual(_ v1: Double, _ v2: Double, tolerance: Double = 0.0001) {
|
||||
let diff = v1 - v2
|
||||
XCTAssert(-tolerance <= diff && diff <= +tolerance)
|
||||
}
|
|
@ -21,6 +21,7 @@ final class ImplicationTests: XCTestCase {
|
|||
|
||||
let sut = bigPressure --> smallVolume
|
||||
|
||||
XCTAssertEqual(sut(4, 1, method: .standardStrict), 1.0)
|
||||
XCTAssertApproximatelyEqual(sut(4, 1), 0.75)
|
||||
XCTAssertApproximatelyEqual(sut(4, 1, method: .standardStrict), 1)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,13 +5,3 @@ public func XCTAssertApproximatelyEqual(_ v1: Double, _ v2: Double, tolerance: D
|
|||
let diff = v1 - v2
|
||||
XCTAssert(-tolerance <= diff && diff <= +tolerance)
|
||||
}
|
||||
|
||||
public func assertExpectedGrade<E, S: FuzzySet>(element: E, expectedGrade: Grade, sut: S)
|
||||
where S.Universe == E {
|
||||
let grade1 = sut[element]
|
||||
let grade2 = sut.grade(forElement: element)
|
||||
|
||||
XCTAssertApproximatelyEqual(grade1, grade2)
|
||||
XCTAssertApproximatelyEqual(expectedGrade, grade1)
|
||||
XCTAssertApproximatelyEqual(expectedGrade, grade2)
|
||||
}
|
||||
|
|
|
@ -10,8 +10,12 @@ func assertExpectedGrade<E, S: FuzzySet>(element: E, expectedGrade: Grade, sut:
|
|||
where S.Universe == E {
|
||||
let grade1 = sut[element]
|
||||
let grade2 = sut.grade(forElement: element)
|
||||
let grade3 = sut(element)
|
||||
|
||||
XCTAssertApproximatelyEqual(grade1, grade2)
|
||||
XCTAssertApproximatelyEqual(grade2, grade3)
|
||||
XCTAssertApproximatelyEqual(grade1, grade3)
|
||||
XCTAssertApproximatelyEqual(expectedGrade, grade1)
|
||||
XCTAssertApproximatelyEqual(expectedGrade, grade2)
|
||||
XCTAssertApproximatelyEqual(expectedGrade, grade3)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue