use of com.ichi2.libanki.Deck in project AnkiChinaAndroid by ankichinateam.
the class SchedV2Test method test_negativeDueFilter.
// cards with a due date earlier than the collection should retain
// their due date when removed
@Test
public void test_negativeDueFilter() throws Exception {
Collection col = getColV2();
// card due prior to collection date
Note note = col.newNote();
note.setItem("Front", "one");
note.setItem("Back", "two");
col.addNote(note);
Card c = note.cards().get(0);
c.setDue(-5);
c.setQueue(QUEUE_TYPE_REV);
c.setIvl(5);
c.flush();
// into and out of filtered deck
long did = col.getDecks().newDyn("Cram");
col.getSched().rebuildDyn(did);
col.getSched().emptyDyn(did);
col.reset();
c.load();
assertEquals(-5, c.getDue());
}
use of com.ichi2.libanki.Deck in project AnkiChinaAndroid by ankichinateam.
the class SchedV2Test method test_preview.
@Test
public void test_preview() throws Exception {
// add cards
Collection col = getColV2();
Note note = col.newNote();
note.setItem("Front", "one");
col.addNote(note);
Card c = note.cards().get(0);
Card orig = c.clone();
Note note2 = col.newNote();
note2.setItem("Front", "two");
col.addNote(note2);
// cram deck
long did = col.getDecks().newDyn("Cram");
Deck cram = col.getDecks().get(did);
cram.put("resched", false);
col.getDecks().save(cram);
col.getSched().rebuildDyn(did);
col.reset();
// grab the first card
c = col.getSched().getCard();
assertEquals(2, col.getSched().answerButtons(c));
assertEquals(600, col.getSched().nextIvl(c, 1));
assertEquals(0, col.getSched().nextIvl(c, 2));
// failing it will push its due time back
long due = c.getDue();
col.getSched().answerCard(c, 1);
assertNotEquals(c.getDue(), due);
// the other card should come next
Card c2 = col.getSched().getCard();
assertNotEquals(c2.getId(), c.getId());
// passing it will remove it
col.getSched().answerCard(c2, 2);
assertEquals(QUEUE_TYPE_NEW, c2.getQueue());
assertEquals(0, c2.getReps());
assertEquals(CARD_TYPE_NEW, c2.getType());
// the other card should appear again
c = col.getSched().getCard();
assertEquals(orig.getId(), c.getId());
// emptying the filtered deck should restore card
col.getSched().emptyDyn(did);
c.load();
assertEquals(QUEUE_TYPE_NEW, c.getQueue());
assertEquals(0, c.getReps());
assertEquals(CARD_TYPE_NEW, c.getType());
}
use of com.ichi2.libanki.Deck in project AnkiChinaAndroid by ankichinateam.
the class SchedV2Test method test_deckDueV2.
@Test
public void test_deckDueV2() throws Exception {
Collection col = getColV2();
// add a note with default deck
Note note = col.newNote();
note.setItem("Front", "one");
col.addNote(note);
// and one that's a child
note = col.newNote();
note.setItem("Front", "two");
long default1 = col.getDecks().id("Default::1");
note.model().put("did", default1);
col.addNote(note);
// make it a review card
Card c = note.cards().get(0);
c.setQueue(QUEUE_TYPE_REV);
c.setDue(0);
c.flush();
// add one more with a new deck
note = col.newNote();
note.setItem("Front", "two");
note.model().put("did", col.getDecks().id("foo::bar"));
col.addNote(note);
// and one that's a sibling
note = col.newNote();
note.setItem("Front", "three");
note.model().put("did", col.getDecks().id("foo::baz"));
col.addNote(note);
col.reset();
assertEquals(5, col.getDecks().allSortedNames().size());
DeckDueTreeNode tree = col.getSched().deckDueTree().get(0);
assertEquals("Default", tree.getLastDeckNameComponent());
// sum of child and parent
assertEquals(1, tree.getDid());
assertEquals(1, tree.getRevCount());
assertEquals(1, tree.getNewCount());
// child count is just review
DeckDueTreeNode child = tree.getChildren().get(0);
assertEquals("1", child.getLastDeckNameComponent());
assertEquals(default1, child.getDid());
assertEquals(1, child.getRevCount());
assertEquals(0, child.getNewCount());
// code should not fail if a card has an invalid deck
c.setDid(12345);
c.flush();
col.getSched().deckDueTree();
}
use of com.ichi2.libanki.Deck in project AnkiChinaAndroid by ankichinateam.
the class SchedV2Test method test_filt_reviewing_early_normal.
@Test
public void test_filt_reviewing_early_normal() throws Exception {
Collection col = getColV2();
Note note = col.newNote();
note.setItem("Front", "one");
col.addNote(note);
Card c = note.cards().get(0);
c.setIvl(100);
c.setQueue(CARD_TYPE_REV);
c.setType(QUEUE_TYPE_REV);
// due in 25 days, so it's been waiting 75 days
c.setDue(col.getSched().getToday() + 25);
c.setMod(1);
c.setFactor(STARTING_FACTOR);
c.startTimer();
c.flush();
col.reset();
assertArrayEquals(new int[] { 0, 0, 0 }, col.getSched().counts());
// create a dynamic deck and refresh it
long did = col.getDecks().newDyn("Cram");
col.getSched().rebuildDyn(did);
col.reset();
// should appear as normal in the deck list
/* todo sort
assertEquals(1, sorted(col.getSched().deckDueTree().getChildren())[0].review_count);
*/
// and should appear in the counts
assertArrayEquals(new int[] { 0, 0, 1 }, col.getSched().counts());
// grab it and check estimates
c = col.getSched().getCard();
assertEquals(4, col.getSched().answerButtons(c));
assertEquals(600, col.getSched().nextIvl(c, 1));
assertEquals(Math.round(75 * 1.2) * SECONDS_PER_DAY, col.getSched().nextIvl(c, 2));
assertThat(col.getSched().nextIvl(c, 3), is((long) (75 * 2.5) * SECONDS_PER_DAY));
assertThat(col.getSched().nextIvl(c, 4), is((long) (75 * 2.5 * 1.15) * SECONDS_PER_DAY));
// answer 'good'
col.getSched().answerCard(c, 3);
checkRevIvl(col, c, 90);
assertEquals(col.getSched().getToday() + c.getIvl(), c.getDue());
assertEquals(0L, c.getODue());
// should not be in learning
assertEquals(QUEUE_TYPE_REV, c.getQueue());
// should be logged as a cram rep
assertEquals(3, col.getDb().queryLongScalar("select type from revlog order by id desc limit 1"));
// due in 75 days, so it's been waiting 25 days
c.setIvl(100);
c.setDue(col.getSched().getToday() + 75);
c.flush();
col.getSched().rebuildDyn(did);
col.reset();
c = col.getSched().getCard();
assertEquals(60 * SECONDS_PER_DAY, col.getSched().nextIvl(c, 2));
assertEquals(100 * SECONDS_PER_DAY, col.getSched().nextIvl(c, 3));
assertEquals(114 * SECONDS_PER_DAY, col.getSched().nextIvl(c, 4));
}
use of com.ichi2.libanki.Deck in project AnkiChinaAndroid by ankichinateam.
the class SchedV2Test method test_reorder.
@Test
public void test_reorder() throws Exception {
Collection col = getColV2();
// add a note with default deck
Note note = col.newNote();
note.setItem("Front", "one");
col.addNote(note);
Note note2 = col.newNote();
note2.setItem("Front", "two");
col.addNote(note2);
assertEquals(2, note2.cards().get(0).getDue());
boolean found = false;
// 50/50 chance of being reordered
for (int i = 0; i < 20; i++) {
col.getSched().randomizeCards(1);
if (note.cards().get(0).getDue() != note.getId()) {
found = true;
break;
}
}
assertTrue(found);
col.getSched().orderCards(1);
assertEquals(1, note.cards().get(0).getDue());
// shifting
Note note3 = col.newNote();
note3.setItem("Front", "three");
col.addNote(note3);
Note note4 = col.newNote();
note4.setItem("Front", "four");
col.addNote(note4);
assertEquals(1, note.cards().get(0).getDue());
assertEquals(2, note2.cards().get(0).getDue());
assertEquals(3, note3.cards().get(0).getDue());
assertEquals(4, note4.cards().get(0).getDue());
/* todo: start
col.getSched().sortCards(new long [] {note3.cards().get(0).getId(), note4.cards().get(0).getId()}, start=1, shift=true);
assertEquals(3, note.cards().get(0).getDue());
assertEquals(4, note2.cards().get(0).getDue());
assertEquals(1, note3.cards().get(0).getDue());
assertEquals(2, note4.cards().get(0).getDue());
*/
}
Aggregations