 
         wait(for: [ex], timeout: 10)
     }
+
+    #if swift(>=4)
+    func testFilterValuesByKeyPath() {
+
+        let ex = expectation(description: "")
+
+        Guarantee.value([Person(name: "Max"), Person(name: "Roman", age: 26, isStudent: false), Person(name: "John", age: 23, isStudent: true)])
+            .filterValues(\.isStudent)
+            .done { values in
+                XCTAssertEqual([Person(name: "John", age: 23, isStudent: true)], values)
+                ex.fulfill()
+            }
+
+        wait(for: [ex], timeout: 10)
+    }
+    #endif
 
     func testSorted() {
 

        wait(for: [ex], timeout: 10)
    }

    func testThenMap() {

        let ex = expectation(description: "")

        wait(for: [ex], timeout: 10)
    }

    #if swift(>=4)
    func testMapValuesByKeyPath() {
        let ex = expectation(description: "")

        Guarantee.value([Person(name: "Max"), Person(name: "Roman"), Person(name: "John")])
            .mapValues(\.name)
            .done { values in
                XCTAssertEqual(["Max", "Roman", "John"], values)
                ex.fulfill()
            }

        wait(for: [ex], timeout: 10)
    }
    #endif

    func testFlatMapValues() {
        let ex = expectation(description: "")

