more learning unit tests

This commit is contained in:
Damien Elmes 2011-03-17 10:29:49 +09:00
parent 96f36e66f7
commit 14c49a50cd
2 changed files with 41 additions and 7 deletions

View file

@ -201,13 +201,13 @@ limit %d""" % self.learnLimit, lim=self.dayCutoff)
return conf['lapse']
def rescheduleAsReview(self, card, conf, early):
card.queue = 1
card.type = 1
if card.type == 1:
# failed; put back entry due
card.due = card.edue
else:
self.rescheduleNew(card, conf, early)
card.queue = 1
card.type = 1
def rescheduleNew(self, card, conf, early):
if not early:
@ -219,7 +219,8 @@ limit %d""" % self.learnLimit, lim=self.dayCutoff)
else:
# first time bonus
int_ = conf['ints'][1]
card.interval = int_
card.ivl = int_
card.due = self.today+int_
card.factor = conf['initialFactor']
def logLearn(self, card, ease, conf, leaving):
@ -245,7 +246,7 @@ where queue = 0 and type = 1
self.revQueue = self.db.all("""
select id from cards where
queue = 1 %s and due < :lim order by %s limit %d""" % (
self.groupLimit("rev"), self.revOrder(), self.queueLimit),
self.groupLimit("rev"), self.revOrder(), self.queueLimit),
lim=self.dayCutoff)
if self.deck.qconf['revCardOrder'] == REV_CARDS_RANDOM:
random.shuffle(self.revQueue)

View file

@ -94,6 +94,39 @@ def test_learn():
d.sched.answerCard(c, 2)
assert c.queue == 1
assert c.type == 1
print "test intervals, check early removal, etc"
# should be due tomorrow, with an interval of 1
assert c.due == d.sched.today+1
assert c.ivl == 1
# let's try early removal bonus
c.type = 2
c.queue = 0
c.cycles = 0
d.sched.answerCard(c, 3)
assert c.type == 1
assert c.ivl == 7
# or normal removal
c.type = 2
c.queue = 0
c.cycles = 1
d.sched.answerCard(c, 3)
assert c.type == 1
assert c.ivl == 4
# revlog should have been updated each time
d.db.scalar("select count() from revlog where type = 0") == 6
# now failed card handling
c.type = 1
c.queue = 0
c.edue = 123
d.sched.answerCard(c, 3)
assert c.due == 123
assert c.type == 1
assert c.queue == 1
# we should be able to remove manually, too
c.type = 1
c.queue = 0
c.edue = 321
c.flush()
d.sched.removeFailed()
c.load()
assert c.queue == 1
assert c.due == 321