and undue cards have untouched ivl

This commit is contained in:
Damien Elmes 2012-05-24 17:35:27 +09:00
parent 455796f189
commit e3bb4a817e
2 changed files with 30 additions and 5 deletions

View file

@ -552,8 +552,12 @@ did = ? and queue = 3 and due <= ? limit ?""",
return self._newConf(card)
def _rescheduleAsRev(self, card, conf, early):
if card.type == 2:
lapse = card.type == 2
if lapse:
if self._resched(card):
card.due = max(self.today+1, card.odue)
else:
card.due = card.odue
card.odue = 0
else:
self._rescheduleNew(card, conf, early)
@ -566,7 +570,7 @@ did = ? and queue = 3 and due <= ? limit ?""",
card.odue = 0
card.odid = 0
# if rescheduling is off, it needs to be set back to a new card
if not resched:
if not resched and not lapse:
card.queue = card.type = 0
card.due = self.col.nextID("pos")
@ -592,7 +596,8 @@ did = ? and queue = 3 and due <= ? limit ?""",
def _graduatingIvl(self, card, conf, early, adj=True):
if card.type == 2:
# lapsed card being relearnt
if card.odid and conf['resched']:
if card.odid:
if conf['resched']:
return self._dynIvlBoost(card)
return card.ivl
if not early:
@ -1128,6 +1133,8 @@ your short-term review workload will become."""))
left = card.left%1000 - 1
if left <= 0:
# graduate
if not self._resched(card):
return 0
return self._graduatingIvl(card, conf, False, adj=False) * 86400
else:
return self._delayForGrade(conf, left)

View file

@ -650,6 +650,24 @@ def test_cram_resched():
assert d.sched.nextIvlStr(c, 3) == ""
d.sched.answerCard(c, 3)
assert c.queue == c.type == 0
# undue reviews should also be unaffected
c.ivl = 100
c.type = c.queue = 2
c.due = d.sched.today + 25
c.factor = 2500
c.flush()
cardcopy = copy.copy(c)
d.sched.rebuildDyn(did)
d.reset()
c = d.sched.getCard()
assert ni(c, 1) == 600
assert ni(c, 2) == 0
assert ni(c, 3) == 0
d.sched.answerCard(c, 2)
assert c.ivl == 100
assert c.due == d.sched.today + 25
# check failure too
def test_adjIvl():
d = getEmptyDeck()