     ///
     /// - Returns: A corresponding `String.Index`
     ///
-    private func findValidUTF8Bound(for bound: String.UTF16View.Index, using method: (Int, Int) -> Int) -> String.Index {
+    private func findValidBound(for bound: String.UTF16View.Index, using method: (Int, Int) -> Int) -> String.Index {
 
         var newBound = bound.samePosition(in: self) // nil if we're inside a grapheme cluster
         var i = 1

    ///
    /// - Returns: A valid upper bound represented as a `String.Index`
    ///
    private func findValidUTF8UpperBound(for utf16Range: Range<String.UTF16View.Index>) -> String.Index {

        guard self.utf16.count >= utf16Range.upperBound.encodedOffset else {
            return String.Index(encodedOffset: self.utf16.count)
        }

        return findValidUTF8Bound(for: utf16Range.upperBound, using: +)
    }

    /// Finds a valid UTF-8 `String.Index` matching the bound of a `String.UTF16View.Index`

    ///
    func range(from utf16Range: Range<String.UTF16View.Index>) -> Range<String.Index> {

        let start = self.findValidLowerBound(for: utf16Range)
        let end = self.findValidUpperBound(for: utf16Range)

        return start ..< end
    }
