ticksUpdateRate (NonZero x) = label "updating rate and ticking once returns current rate" $ deltaEq 0.005 (rate run) x
  where
    run = tick $ update x $ empty 5 1

constantRates :: Property
constantRates = label "constant rates" $ \(NonZero x) -> forAll smallNumbers $ \t ->
   deltaEq 0.005 x $ rate (iterate (tick . update x) (empty 5 1) !! t)

clearResetsRate :: Property
clearResetsRate = label "reset rate" $ property (clearedRate == 0)
  where
    clearedRate = rate $ clear $ updatedRate
    updatedRate = tick $ update 10 $ empty 5 1