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 {
|
public subscript(_ u: U, _ v: V) -> Grade {
|
||||||
grade(forElement: (u, v))
|
grade(forElement: (u, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func callAsFunction(_ u: U, _ v: V) -> Grade {
|
||||||
|
grade(forElement: (u, v))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension BinaryCartesianProduct: AnyFuzzySetRepresentable {
|
extension BinaryCartesianProduct: AnyFuzzySetRepresentable {
|
||||||
|
|
|
@ -21,6 +21,10 @@ extension BinaryFuzzyRelation: FuzzySet {
|
||||||
public subscript(_ u: U, _ v: V) -> Grade {
|
public subscript(_ u: U, _ v: V) -> Grade {
|
||||||
grade(forElement: (u, v))
|
grade(forElement: (u, v))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func callAsFunction(_ u: U, _ v: V) -> Grade {
|
||||||
|
grade(forElement: (u, v))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension BinaryFuzzyRelation: AnyFuzzySetRepresentable {
|
extension BinaryFuzzyRelation: AnyFuzzySetRepresentable {
|
||||||
|
|
|
@ -63,4 +63,8 @@ extension FuzzyRelationsComposition: FuzzySet {
|
||||||
public subscript(_ u: U, _ w: W) -> Grade {
|
public subscript(_ u: U, _ w: W) -> Grade {
|
||||||
grade(forElement: (u, w))
|
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 {
|
public subscript(_ u: U...) -> Grade {
|
||||||
grade(forElement: u)
|
grade(forElement: u)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func callAsFunction(_ u: U...) -> Grade {
|
||||||
|
grade(forElement: u)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension HomogenousFuzzyRelation: AnyFuzzySetRepresentable {
|
extension HomogenousFuzzyRelation: AnyFuzzySetRepresentable {
|
||||||
|
|
|
@ -21,6 +21,10 @@ extension TernaryFuzzyRelation: FuzzySet {
|
||||||
public subscript(_ u: U, _ v: V, _ w: W) -> Grade {
|
public subscript(_ u: U, _ v: V, _ w: W) -> Grade {
|
||||||
grade(forElement: (u, v, w))
|
grade(forElement: (u, v, w))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func callAsFunction(_ u: U, _ v: V, _ w: W) -> Grade {
|
||||||
|
grade(forElement: (u, v, w))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension TernaryFuzzyRelation: AnyFuzzySetRepresentable {
|
extension TernaryFuzzyRelation: AnyFuzzySetRepresentable {
|
||||||
|
|
|
@ -15,4 +15,8 @@ public extension FuzzySet {
|
||||||
grade(forElement: element)
|
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
|
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
|
let diff = v1 - v2
|
||||||
XCTAssert(-tolerance <= diff && diff <= +tolerance)
|
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 {
|
where S.Universe == E {
|
||||||
let grade1 = sut[element]
|
let grade1 = sut[element]
|
||||||
let grade2 = sut.grade(forElement: element)
|
let grade2 = sut.grade(forElement: element)
|
||||||
|
let grade3 = sut(element)
|
||||||
|
|
||||||
XCTAssertApproximatelyEqual(grade1, grade2)
|
XCTAssertApproximatelyEqual(grade1, grade2)
|
||||||
|
XCTAssertApproximatelyEqual(grade2, grade3)
|
||||||
|
XCTAssertApproximatelyEqual(grade1, grade3)
|
||||||
XCTAssertApproximatelyEqual(expectedGrade, grade1)
|
XCTAssertApproximatelyEqual(expectedGrade, grade1)
|
||||||
XCTAssertApproximatelyEqual(expectedGrade, grade2)
|
XCTAssertApproximatelyEqual(expectedGrade, grade2)
|
||||||
|
XCTAssertApproximatelyEqual(expectedGrade, grade3)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue