 let sw = Stopwatch()
 var count = 0
 
-p("splitOnceFB#splitOnceFB")
+p("String#splitOnceFB")
 sw.start()
 for _ in 0..<ITERATIONS {
   let (key, value) = sample.splitOnceFB("kl")!

  }
}
p("Elapsed: \(sw.millis)ms count: \(count)")


}

extension String.UTF16View {

  private func splitOnceFB2(at: String.UTF16View)
    -> (String.UTF16View, String.UTF16View)? {
      guard let c = at.first else { return nil }
      let second = at.startIndex.successor()
      for i in startIndex..<endIndex.advancedBy(1-at.count) where self[i] == c {
        var (j,k) = (second,i.successor())
        repeat {
          if j == at.endIndex {
            return (prefixUpTo(i), suffixFrom(k))
          } else if k == endIndex {
            break
          }
        } while self[k++] == at[j++]
      }
      return nil
  }

}


extension String {

  func splitOnceFB(at: String) -> (String, String)? {
    return self
      .characters
      .splitOnceFB(at.characters)
      .map { (a,b) in (String(a), String(b)) }
  }

  public func splitOnceFB2(string: String) -> (String, String)? {
    return self
      .utf16
      .splitOnceFB2(string.utf16)
      .map { (a,b) in (String(a), String(b)) }
  }

