Improving test coverage for btree::cursor

[?]
Feb 1, 2021, 8:54 AM
PXF3R6SVXJXN2NMLMWNY5OFV5QYVE2VZTLGIZDZVK5ZVLFTVSSWQC

Dependencies

  • [2] ONES3V46 reference counting works for put
  • [3] OP6SVMOD Resetting history
  • [4] FMN7X4J2 Micro-improvements, now noticeably faster than std::collections::BTreeMap
  • [5] WS4ZQM4R Debugging, tests, etc.

Change contents

  • edit in sanakirja-core/src/btree/cursor.rs at line 86
    [3.2548][2.1544:1601]()
    debug!("self.pointer = {:?}", self.pointer);
  • edit in sanakirja-core/src/btree/cursor.rs at line 88
    [3.66371][2.1602:1684]()
    debug!("page = {:?}, rc = {:?}", current.page, txn.rc(page.offset)?);
  • edit in sanakirja-core/src/btree/cursor.rs at line 89
    [3.66450][2.1685:1748]()
    debug!("first_rc_level = {:?}", self.pointer);
  • edit in sanakirja-core/src/btree/cursor.rs at line 105
    [3.34397][3.34397:34448]()
    debug!("next_page = {:?}", next_page);
  • edit in sanakirja-core/src/btree/cursor.rs at line 107
    [3.67229][3.34449:34500]()
    debug!("p+ = {:?}", self.pointer);
  • edit in sanakirja-core/src/btree/cursor.rs at line 112
    [3.67430][3.34681:34736]()
    debug!("last p = {:?}", self.pointer);
  • edit in sanakirja-core/src/btree/cursor.rs at line 116
    [3.67513][3.34737:34799]()
    debug!("last_matching {:?}", last_matching_page);
  • edit in sanakirja-core/src/btree/cursor.rs at line 119
    [3.67604][3.34800:34850]()
    debug!("pointer {:?}", self.pointer);
  • replacement in sanakirja-core/src/btree/cursor.rs at line 156
    [3.68948][3.68948:69343](),[3.69343][3.35301:35383](),[3.35383][3.69416:69743](),[3.69416][3.69416:69743](),[3.69743][3.35384:35439](),[3.35439][3.69804:70012](),[3.69804][3.69804:70012](),[3.70012][3.35440:35524](),[3.35524][3.70087:70218](),[3.70087][3.70087:70218](),[3.70218][3.35525:35603](),[3.35603][3.70287:70442](),[3.70287][3.70287:70442]()
    if self.pointer == 0 {
    return Ok(None);
    } else {
    let current = unsafe { &mut *self.stack[self.pointer].as_mut_ptr() };
    if let Some(ref mut c) = current.cursor {
    // We're inside the page, and have already
    // processed the left child of the current page
    // cursor.
    if let Some((k, v, r)) = P::next(current.page.as_page(), c) {
    if r > 0 {
    self.pointer += 1;
    self.stack[self.pointer] = MaybeUninit::new(PageCursor {
    page: txn.load_page(r)?,
    cursor: None,
    })
    }
    return Ok(Some((& *k, & *v)));
    } else if self.pointer > 1 {
    self.pointer -= 1
    } else {
    return Ok(None);
    }
    } else {
    current.cursor = Some(P::first_cursor(current.page.as_page()));
    // First element of a page (not a binding).
    let cursor = current.cursor.as_ref().unwrap();
    let left = P::left_child(current.page.as_page(), cursor);
    debug!("left = {:?}", left);
    // Then visit the right child (if any), i.e. push.
    if left != 0 {
    [3.68948]
    [3.70442]
    let current = unsafe { &mut *self.stack[self.pointer].as_mut_ptr() };
    if let Some(ref mut c) = current.cursor {
    // We're inside the page, and have already
    // processed the left child of the current page
    // cursor.
    if let Some((k, v, r)) = P::next(current.page.as_page(), c) {
    if r > 0 {
  • replacement in sanakirja-core/src/btree/cursor.rs at line 165
    [3.70566][3.70566:70622]()
    page: txn.load_page(left)?,
    [3.70566]
    [3.70622]
    page: txn.load_page(r)?,
  • edit in sanakirja-core/src/btree/cursor.rs at line 169
    [3.70713]
    [3.70713]
    return Ok(Some((& *k, & *v)));
    } else if self.pointer > 1 {
    self.pointer -= 1
    } else {
    return Ok(None);
    }
    } else {
    current.cursor = Some(P::first_cursor(current.page.as_page()));
    // First element of a page (not a binding).
    let cursor = current.cursor.as_ref().unwrap();
    let left = P::left_child(current.page.as_page(), cursor);
    // Then visit the right child (if any), i.e. push.
    if left != 0 {
    self.pointer += 1;
    self.stack[self.pointer] = MaybeUninit::new(PageCursor {
    page: txn.load_page(left)?,
    cursor: None,
    })
  • replacement in sanakirja/src/environment/muttxn.rs at line 17
    [3.80384][3.37289:37308]()
    free: CowPage,
    [3.80384]
    [3.80400]
    pub(crate) free: CowPage,