From 38477208d3f8b8103a2a756f372da9968a397c43 Mon Sep 17 00:00:00 2001 From: Alexander Ignatov Date: Fri, 17 Dec 2021 00:58:10 +0200 Subject: [PATCH] Add fuzzify and fromCrispSet --- Sources/FuzzyKit/DiscreteFuzzySet.swift | 14 +++++++++++++ .../FuzzyKitTests/DiscreteFuzzySetTests.swift | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/Sources/FuzzyKit/DiscreteFuzzySet.swift b/Sources/FuzzyKit/DiscreteFuzzySet.swift index c0a3338..3b78d59 100644 --- a/Sources/FuzzyKit/DiscreteFuzzySet.swift +++ b/Sources/FuzzyKit/DiscreteFuzzySet.swift @@ -25,3 +25,17 @@ public struct DiscreteFuzzySet: FuzzySet { } } } + +public extension DiscreteFuzzySet { + static func fromCrispSet(_ set: Set) -> Self { + let gradeTuples = set.map { ($0, 1.0 ) } + let gradeDictionary = Dictionary(uniqueKeysWithValues: gradeTuples) + return .init(elementToGradeMap: gradeDictionary) + } +} + +public extension Set { + func fuzzified() -> DiscreteFuzzySet { + DiscreteFuzzySet.fromCrispSet(self) + } +} diff --git a/Tests/FuzzyKitTests/DiscreteFuzzySetTests.swift b/Tests/FuzzyKitTests/DiscreteFuzzySetTests.swift index 69c6a08..524ea81 100644 --- a/Tests/FuzzyKitTests/DiscreteFuzzySetTests.swift +++ b/Tests/FuzzyKitTests/DiscreteFuzzySetTests.swift @@ -60,4 +60,24 @@ final class DiscreteFuzzySetTests: XCTestCase { assertExpectedGrade(element: element, expectedGrade: grade, sut: sut2) } } + + func test_fuzzify_gradesAreCorrect() throws { + let cs: Set = ["a", "b", "c"] + let expected = [ + "a": 1.0, + "b": 1.0, + "c": 1.0, + "d": 0.0, + " ": 0.0, + "": 0.0, + ] + + let fs1 = cs.fuzzified() + let fs2 = DiscreteFuzzySet.fromCrispSet(cs) + + for (element, grade) in expected { + assertExpectedGrade(element: element, expectedGrade: grade, sut: fs1) + assertExpectedGrade(element: element, expectedGrade: grade, sut: fs2) + } + } }