summary refs log tree commit diff stats
path: root/tests/exception/testindexerroroutput.nims
Commit message (Collapse)AuthorAgeFilesLines
* revive #10228 (fix #9880) (#10610)Timothee Cour2019-02-131-0/+23
* Make index out of bounds more useful by including the 'bounds'. * fixes #9880 index out of bounds (remaining cases); revives #10228 * change err msg to: `index 3 not in 0 .. 1`
id='n42' href='#n42'>42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78













































































                                                                         
local curses = require "curses"


tower = {{5, 4, 3, 2, 1}, {}, {}}


local function len(array)
  local result = 0
  for k in pairs(array) do
    result = result+1
  end
  return result
end


local function pop(array)
  return table.remove(array)
end


local function render_tower(screen, line, col, tower_index, tower)
  screen:attron(curses.A_BOLD)
  screen:mvaddch(line+2, col, string.char(96+tower_index))
  screen:attroff(curses.A_BOLD)
  screen:mvaddstr(line+1, col-3, "-------")
  for i, n in ipairs(tower) do
    screen:mvaddstr(line, col, n)
    line = line - 1
  end
  for i=1,5-len(tower) do
    screen:mvaddstr(line, col, "|")
    line = line - 1
  end
end


local function render(screen)
  screen:clear()
  local lines = curses.lines()
  local cols = curses.cols()
  local line = math.floor(lines/2)
  local col = math.floor(cols/4)
  for i,t in ipairs(tower) do
    render_tower(screen, line, i*col, i, t)
  end
end


local function make_move(from, to)
  local disk = pop(tower[from])
  table.insert(tower[to], disk)
end


local function update(screen)
  screen:mvaddstr(curses.lines()-2, 5, "tower to remove top disk from? ")
  local from = string.byte(curses.getch()) - 96
  curses.refresh()
  screen:mvaddstr(curses.lines()-1, 5, "tower to stack it on? ")
  local to = string.byte(curses.getch()) - 96
  curses.refresh()
  make_move(from, to)
end


local function main()
  local screen = curses.initscr()

  while 1 do
    render(screen)
    update(screen)
  end

  curses.endwin ()
end


main()