diff --git a/anki/sched.py b/anki/sched.py index d6076fe49..8e4905ae9 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -506,13 +506,15 @@ did = ? and queue = 3 and due <= ? limit ?""", else: card.left = self._startingLeft(card) if card.odid: - if 'mult' in conf: + resched = self._resched(card) + if 'mult' in conf and resched: # review that's lapsed card.ivl = max(1, card.ivl*conf['mult']) else: # new card; no ivl adjustment pass - card.odue = self.today + 1 + if resched: + card.odue = self.today + 1 delay = self._delayForGrade(conf, card.left) if card.due < time.time(): # not collapsed; add some randomness diff --git a/tests/test_sched.py b/tests/test_sched.py index eb17817b5..3b9499199 100644 --- a/tests/test_sched.py +++ b/tests/test_sched.py @@ -667,7 +667,29 @@ def test_cram_resched(): assert c.ivl == 100 assert c.due == d.sched.today + 25 # check failure too - + c = cardcopy + c.flush() + d.sched.rebuildDyn(did) + d.reset() + c = d.sched.getCard() + d.sched.answerCard(c, 1) + d.sched.emptyDyn(did) + c.load() + assert c.ivl == 100 + assert c.due == d.sched.today + 25 + # fail+grad early + c = cardcopy + c.flush() + d.sched.rebuildDyn(did) + d.reset() + c = d.sched.getCard() + d.sched.answerCard(c, 1) + d.sched.answerCard(c, 3) + d.sched.emptyDyn(did) + c.load() + assert c.ivl == 100 + assert c.due == d.sched.today + 25 + # due cards def test_adjIvl(): d = getEmptyDeck()