diff --git a/anki/sched.py b/anki/sched.py index 65c257fb4..c9f9b207f 100644 --- a/anki/sched.py +++ b/anki/sched.py @@ -528,16 +528,15 @@ did = ? and queue = 3 and due <= ? limit ?""", # failed else: card.left = self._startingLeft(card) - if card.odid: - 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 - if resched: - card.odue = self.today + 1 + 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 + if resched and card.odid: + 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 bcf88c956..9dfd4ebbd 100644 --- a/tests/test_sched.py +++ b/tests/test_sched.py @@ -1144,3 +1144,25 @@ def test_norelearn(): d.sched.answerCard(c, 1) d.sched._cardConf(c)['lapse']['delays'] = [] d.sched.answerCard(c, 1) + +def test_failmult(): + d = getEmptyDeck() + f = d.newNote() + f['Front'] = u"one"; f['Back'] = u"two" + d.addNote(f) + c = f.cards()[0] + c.type = 2 + c.queue = 2 + c.ivl = 100 + c.due = d.sched.today - c.ivl + c.factor = 2500 + c.reps = 3 + c.lapses = 1 + c.startTimer() + c.flush() + d.sched._cardConf(c)['lapse']['mult'] = 0.5 + c = d.sched.getCard() + d.sched.answerCard(c, 1) + assert c.ivl == 50 + d.sched.answerCard(c, 1) + assert c.ivl == 25