///|
/// Generate evenly spaced tick positions, retaining the direction of limits.
pub fn linear_ticks(limits : @core.Limits, count~ : Int32 = 6) -> Array[Double] {
  if !limits.is_finite() {
    return []
  }
  if limits.lower() == limits.upper() {
    return [limits.lower()]
  }
  let actual = if count < 2 { 2 } else { count }
  let step = (limits.upper() - limits.lower()) / Double::from_int(actual - 1)
  let values = Array(capacity=actual)
  for i in 0.. String {
  Double::to_string(value)
}