Add call as function to all sets

This commit is contained in:
Alexander Ignatov 2021-12-30 13:28:47 +02:00
parent eaf1009b2f
commit 414cf2be21
10 changed files with 37 additions and 11 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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))
}
}

View File

@ -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 {

View File

@ -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 {

View File

@ -15,4 +15,8 @@ public extension FuzzySet {
grade(forElement: element)
}
}
func callAsFunction(_ element: Universe) -> Grade {
grade(forElement: element)
}
}

View File

@ -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)
}

View File

@ -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)
}
}

View File

@ -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)
}

View File

@ -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)
}