date_or_now = date_or_now ? new Date()
    
    if date_or_now.sec?
      now = date_or_now
    else
      now = date_to_now(date_or_now)
    if @last?
      if @last.sec is now.sec
        if @last.nsec is now.nsec
          now.nsec++
          if now.nsec >= one_billion 
            now.nsec = 0
            ++now.nsec
        else
          now.nsec = @last.nsec + 1
    @last = now
    return {sec:@last.sec, nsec:@last.nsec}
  asDate: () ->
    return new Date(@asMsec())
  asMsec: () ->
    now = @now()
    return (now.sec * 1000) + ((now.nsec / one_million) | 0)
  
class ControlledClock extends Clock
  constructor: (date) ->
    if not date?
      throw new Error "ControlledClock(initial_date) requires an initial Date()"
    @last = date_to_now(date)
  now: (date_or_now) ->
    super(@last)
(exports ? this).ControlledClock = ControlledClock
(exports ? this).Clock = Clock
(exports ? this).date_to_now = date_to_now
(exports ? this).one_million = one_million