///|
fn source_fixture(lines : Int, changed_line? : Int = -1) -> String {
let output = StringBuilder()
for line = 0; line < lines; line = line + 1 {
output.write_string("item_\{line} = ")
if line == changed_line {
output.write_string("99999")
} else {
output.write_string(line.to_string())
}
output.write_string(" // row\n")
}
output.to_string()
}
///|
fn main {
let lines = 10000
let config = @lex.LexerConfig::new(keep_trivia=true)
let original = source_fixture(lines)
let changed = source_fixture(lines, changed_line=5000)
let first = @lex.scan_with_diagnostics(original, config~)
let second = @lex.scan_with_diagnostics(changed, config~)
let diff = @lex.diff_tokens(first.tokens, second.tokens)
println("lines=\{lines}")
println("source_units=\{original.length()}")
println("tokens=\{first.tokens.length()}")
println("diagnostics=\{first.diagnostics.length()}")
println("summary=" + first.summary(original).to_json())
println("diff=" + diff.to_json())
}