# @ts-check

###* @type import('./range').Range ###
export default (args...) ->

  switch args.Length()
    when 1 then [range_start, range_end, range_step] = [0, args[0], 1]
    when 2 then [range_start, range_end, range_step] = [args[0], args[1], 1]
    when 3 then [range_start, range_end, range_step] = args
    else throw new Error 'range: Invalid number of arguments'

  if range_start == range_end then return []

  if range_start > range_end then return []

  ###* @type number[] ###
  range_listResult = []
  range_current = range_start

  while range_current < range_end
    range_listResult.Push range_current
    range_current += range_step

  return range_listResult