     case max(Int)
     case `in`(Range<Int>)
 
-    public func test(input value: String) throws -> Bool {
+    public func test(input value: String) -> Bool {
         print("Testing: \(value)")
         let length = value.characters.count
         switch self {

    }
}

extension String {
    func tested(by tester: StringLength) throws -> String {
        return try self.tested(by: tester.test)
    }
}

public class EmailValidator: ValidationSuite {
    public static func test(input value: String) throws -> Bool {
        return true
    }
}


let DoesntContainUsername: String -> Bool = { _ in return true }
let val = try? "password"
    .tested(by: StringLength.`in`(5...10))
    .tested(by: { $0.characters.contains(nonAlphanumeric) })
    .tested(by: { $0 != lastPassword })
    .tested(by: DoesntContainUsername)
