     let ret = checkDecodeUTF(TestUTF8.self, expectedHead, expectedRepairedTail, utf8Str)
 
     var reverseResult: [UInt32] = []
-    UTF8.parseReverse(utf8Str, using: UTF8.parseReverseStateMachine) {
+    UTF8.parseReverse(utf8Str, using: UTF8.parse1Reverse) {
       reverseResult.append($0.valid ?? 0xFFFD)
     }
     let expected = expectedHead + expectedRepairedTail

    @inline(__always)
    func accept(_ pat: ClosedRange<UInt8>) -> ParseResult<UInt32, C.Index>? {
      if _fastPath(pat.contains(u)) {
        r |= UInt32(maskLeading1s(u)) << shift
        return .valid(r, resumptionPoint: j)
      }
      return nil

  ///   - Parameter knownCountExceeds3: true if and only if the input is known
  ///   be at least 4 elements long.  If so, we can skip end checks.  Note: pass
  ///   a compile-time constant here or you will just slow the algorithm down!
  static func parse1Forward<C: Collection>(
    _ input: C, knownCountExceeds3: Bool = false
  ) -> ParseResult<UInt32, C.Index>
  where C.Iterator.Element == UTF8.CodeUnit {
