text editor inspired vim and yi
import ViE.Data.PieceTable
import Test.Utils

open ViE

namespace Test.PieceTable.Basic

open Test.Utils

def testInsert : IO Unit := do
  IO.println "testInsert..."
  let pt := PieceTable.fromString "Hello"
  -- Insert at end
  let pt1 := pt.insert 5 " World" 5
  assertEqual "Insert at end" "Hello World" pt1.toString

  -- Insert at middle
  let pt2 := pt1.insert 5 "," 5
  assertEqual "Insert at middle" "Hello, World" pt2.toString

  -- Insert at start
  let pt3 := pt2.insert 0 "Say: " 0
  assertEqual "Insert at start" "Say: Hello, World" pt3.toString

def testDelete : IO Unit := do
  IO.println "testDelete..."
  let pt := PieceTable.fromString "Hello, World!"

  -- Delete "World" (offset 7, len 5)
  let pt1 := pt.delete 7 5 7
  assertEqual "Delete middle" "Hello, !" pt1.toString

  -- Delete start
  let pt2 := pt1.delete 0 7 0
  assertEqual "Delete start" "!" pt2.toString

  -- Delete end
  let pt3 := pt2.delete 0 1 0
  assertEqual "Delete end" "" pt3.toString

def test : IO Unit := do
  IO.println "Starting PieceTable Basic Test..."
  testInsert
  testDelete
  IO.println "PieceTable Basic Test passed!"

end Test.PieceTable.Basic