(integerp (cdr time)) (< 0 (cdr time)))
time
(encode-time time 1000000000000)))
+ (ticks (car ticks-hz))
(hz (cdr ticks-hz))
- (s-ticks (round (* secs hz)))
- (more-ticks (+ (car ticks-hz) s-ticks)))
- (encode-time (cons (- more-ticks (% more-ticks s-ticks)) hz))))
+ trunc-s-ticks)
+ (while (let ((s-ticks (* secs hz)))
+ (setq trunc-s-ticks (truncate s-ticks))
+ (/= s-ticks trunc-s-ticks))
+ (setq ticks (ash ticks 1))
+ (setq hz (ash hz 1)))
+ (let ((more-ticks (+ ticks trunc-s-ticks)))
+ (encode-time (cons (- more-ticks (% more-ticks trunc-s-ticks)) hz)))))
(defun timer-relative-time (time secs &optional usecs psecs)
"Advance TIME by SECS seconds and optionally USECS microseconds
(ert-deftest timer-next-integral-multiple-of-time-2 ()
"Test bug#33071."
(let* ((tc (current-time))
- (tce (encode-time tc 100))
- (nt (timer-next-integral-multiple-of-time tc 0.01))
- (nte (encode-time nt 100)))
- (should (= (car nte) (1+ (car tce))))))
+ (delta-ticks 1000)
+ (hz 128000)
+ (tce (encode-time tc hz))
+ (tc+delta (time-add tce (cons delta-ticks hz)))
+ (tc+deltae (encode-time tc+delta hz))
+ (tc+delta-ticks (car tc+deltae))
+ (tc-nexte (cons (- tc+delta-ticks (% tc+delta-ticks delta-ticks)) hz))
+ (nt (timer-next-integral-multiple-of-time
+ tc (/ (float delta-ticks) hz)))
+ (nte (encode-time nt hz)))
+ (should (equal tc-nexte nte))))
+
+(ert-deftest timer-next-integral-multiple-of-time-3 ()
+ "Test bug#33071."
+ (let ((nt (timer-next-integral-multiple-of-time '(32770 . 65539) 0.5)))
+ (should (time-equal-p 1 nt))))
;;; timer-tests.el ends here