import pixie, stb_truetype, unicode

let fontFiles = [
  # "tests/fonts/Roboto-Regular_1.ttf"
    # "tests/fonts/Aclonica-Regular_1.ttf"
    # "tests/fonts/Ubuntu-Regular_1.ttf"
    # "tests/fonts/IBMPlexSans-Regular_2.ttf"
    # "tests/fonts/NotoSans-Regular_4.ttf"
  "tests/fonts/Pacifico-Regular_4.ttf"
]

for fontFile in fontFiles:
  let stbtt = initFont(readFile(fontFile))
  var font = readFont(fontFile)

  var ascent, descent, lineGap: cint
  stbtt.getFontVMetrics(ascent, descent, lineGap)

  doAssert font.typeface.ascent == ascent.float32
  doAssert font.typeface.descent == descent.float32
  doAssert font.typeface.lineGap == lineGap.float32

  for i in 32 .. 126:
    var advanceWidth, leftSideBearing: cint
    stbtt.getCodepointHMetrics(Rune(i), advanceWidth, leftSideBearing)

    doAssert font.typeface.getAdvance(Rune(i)) == advanceWidth.float32

  for i in 32 .. 126:
    for j in 32 .. 126:
      # echo i, ": ", $Rune(i), "  ", j, ": ", $Rune(j)
      let
        a = stbtt.getCodepointKernAdvance(Rune(i), Rune(j)).float32
        b = font.typeface.getKerningAdjustment(Rune(i), Rune(j))
      if a != b:
        # echo fontFile
        echo i, ": ", $Rune(i), "  ", j, ": ", $Rune(j)
        echo "DISAGREE: ", a, " != ", b, " <<<<<<<<<<<<<<<<<<<<<<<<<<<"
        # quit()

      # echo stbtt.getCodepointKernAdvance(Rune('r'), Rune('s')).float32
      # echo font.typeface.getKerningAdjustment(Rune('r'), Rune('s'))