     
     // MARK: - Private
     
-    private func extractTestName<T: RawRepresentable where T.RawValue == Version>(versionType: T) -> String {
+    private func extractTestName<T: RawRepresentable>(_ versionType: T) -> String where T.RawValue == Version {
         let mirror = Mirror(reflecting: versionType)
         return mirror.subjectName
     }
     
-    private func raffleVersion<T: RawRepresentable where T.RawValue == Version>(versions: [T], testName: String) throws {
+    private func raffleVersion<T: RawRepresentable>(_ versions: [T], testName: String) throws where T.RawValue == Version {
         let versionsRawValue = convertToArrayOfRawValue(versions)
         
         guard isTestProbabilitySumValid(versionsRawValue) else {
-            throw GollumError.ProbabilitySumIncorrect("Sum of \(testName)'s probability isn't 1.0")
+            throw GollumError.probabilitySumIncorrect("Sum of \(testName)'s probability isn't 1.0")
         }
 
         var selectedNumber = generateAleatoryNumber()
         let probabilities = versionsRawValue.map { Int($0.probability * 1000) }
-        for (index, probability) in probabilities.enumerate() {
+        for (index, probability) in probabilities.enumerated() {
             if selectedNumber <= probability {
                 selectedVersions[testName] = versionsRawValue[index]
                 return

    
    // MARK: - Public
    
    public func registerVersions<T: RawRepresentable where T.RawValue == Version>(versions: [T]) throws {
        guard let firstVersion = versions.first else {
            throw GollumError.EmptyVersionArrayPassed("A empty version array was passed to registered.")
        }
        
        let testName = extractTestName(firstVersion)

        }
    }
    
    private func isTestProbabilitySumValid(_ versions: [Version]) -> Bool {
        return versions.reduce(0) { $0 + $1.probability } == 1.0
    }
    
