import Foundation import Testing import OrgPresentation @testable import OrgEditorAppKit struct LineIndexTests { func naive(_ text: String) -> [Int] { var starts = [0] for (i, u) in text.utf16.enumerated() where u == 10 { starts.append(i + 1) } return starts } @Test func followsRandomEdits() { var generator = SystemRandomNumberGenerator() let pieces = ["a", "bc\n", "\n", "\n\n", "xyz", "é\n", "😀", ""] var text = "first\nsecond\n\nthird" let index = LineIndex(text as NSString) for _ in 0..<2000 { let ns = text as NSString let start = Int.random(in: 0...ns.length, using: &generator) let end = min(ns.length, start + Int.random(in: 0...6, using: &generator)) let replacement = pieces.randomElement(using: &generator)! text = ns.replacingCharacters(in: NSRange(location: start, length: end - start), with: replacement) index.replace(start..