diff --git a/lfs.c b/lfs.c index e266a0e6..7a2c3f0e 100644 --- a/lfs.c +++ b/lfs.c @@ -1542,27 +1542,26 @@ static int lfs_rbyd_commit(lfs_t *lfs, lfs_rbyd_t *rbyd, && lfs_rtag_isred(p_alts[0]) && (lt < 0 || gt < 0)) { LFS_ASSERT(lfs_rtag_isblack(alt)); - printf("???\n"); + + printf("rflip %s (%x,%x)\n", + lfs_rtag_parallel(alt, p_alts[0]) ? "parallel" : "perpendicular", + lt, gt); if (lfs_rtag_parallel(alt, p_alts[0])) { printf("rflip parallel (%x,%x)\n", lt, gt); - lfs_rtag_t alt_ = p_alts[0]; - p_alts[0] = lfs_rtag_red(lfs_rbyd_flip(alt, lt, gt)); - alt = lfs_rtag_black(alt_); - lfs_off_t jump_ = p_jumps[0]; - p_jumps[0] = branch; - branch = jump; - jump = jump_; - } else { - printf("rflip perpendicular\n"); - lfs_rtag_t alt_ = p_alts[0]; - p_alts[0] = lfs_rtag_red(alt); - alt = lfs_rtag_black(alt_); - lfs_off_t jump_ = p_jumps[0]; - p_jumps[0] = branch; - jump = jump_; + alt = lfs_rbyd_flip(alt, lt, gt); + lfs_off_t jump_ = jump; + jump = branch; + branch = jump_; } + lfs_rtag_t alt_ = p_alts[0]; + lfs_off_t jump_ = p_jumps[0]; + p_alts[0] = lfs_rtag_red(alt); + p_jumps[0] = jump; + alt = lfs_rtag_black(alt_); + jump = jump_; + lfs_rbyd_untrim(alt, <, >); lfs_rbyd_trim(p_alts[0], <, >); printf("=> (%x, %x)\n", lt, gt); @@ -1698,7 +1697,7 @@ static int lfs_rbyd_commit(lfs_t *lfs, lfs_rbyd_t *rbyd, } off += delta; - //lfs_rbyd_p_red(p_alts, p_jumps); + lfs_rbyd_p_red(p_alts, p_jumps); } // flush any pending alts diff --git a/tests/test_rbyd.toml b/tests/test_rbyd.toml index a82078f1..65cfc773 100644 --- a/tests/test_rbyd.toml +++ b/tests/test_rbyd.toml @@ -626,8 +626,6 @@ code = ''' lfs_rbyd_lookup(&lfs, &rbyd, LFS_MKRTAG(GSTATE, 4, 0), &off, &size) => LFS_MKRTAG(GSTATE, 4, 0); - printf("-------------------------\n"); - // TODO this doesn't work since 2!<1? 4 2 3 1 should work consistently // flip a red edge, ignore a black edge // >y // .-------'|