> > (gdb) up 6
> > #6  0x00005555556171e3 in (anonymous namespace)::assertEquals 
> > (desc=0x5555556922e0 "diff_main: Equality.",
> >     expected=std::vector of length 1, capacity 1 = {...}, 
> > actual=std::vector of length 3, capacity 4 = {...}) at diff_xdiff.cpp:1047
> > 1047        
> > assert(std::equal(expected.begin(),expected.end(),actual.begin(),actual.end())
> >  || 
> > std::equal(alternative.begin(),alternative.end(),actual.begin(),actual.end()));

> ok chatgpt :/

> abandon it, whatever. you can make all sorts of tangles with your instruction 
> pointer, freezing things and thawing them like a bunch of

> all over the stack and heap.

..

ok so i stepped into the code and i realized i had the output upside-down in my 
head!
the message shows after the debugging output from creating the answer to the 
test. so it's not the null case that is showing the advancing pointers, it's 
the next test where one of the docs is empty and the other has a length of 3, 
so it's probably totally correct! OOPS!

chatgpt, make my context move forward into handling the problem that's real 
rather than the one that i was imagining

cpunks: that sounds like a very helpful concept for you to focus on, karl

huh?

anyway

uh

anyway. so the code prior to the assertion is more correct than i thought! but 
there's still an assertion!

the assertion appears to happen after the first diff is yielded. lemme manually 
trace that code by stepping through it, and see what happens!

ready for this, chatgpt?

cpunks: a troll on my list will tell you to stop spamming

i don't read my spam

uhhhh

do i ?

wait

anyway

here we go, chatgpt!

so i'm at the start of the equality test:

1065      assertEquals("diff_main: Equality.", diffs, dmp.diff_main("abc", 
"abc", false));
(gdb)

blargh i hit the wrong button ! i typed 'fin' when it was in diff_main
let's set a bp on diff_main and restart

here we are again:
(gdb) cont
Continuing.
diff_main: Null case.

Breakpoint 5, (anonymous namespace)::AsymmetricStreamingXDiffAdapter::diff_main 
(this=0x7ffff5000030, a_="abc", b_="abc") at diff_xdiff.cpp:1002
1002            std::string a;
2: a_ = "abc"
3: b_ = "abc"

i'm looking through my diff_main source ... looks like basically when it goes 
xdiff.diff is likely to be when things are of interest. it's a generator that 
takes another generator as a parameter.

bp on diff

(gdb) break diff
Breakpoint 6 at 0x55555561092c: diff. (3 locations)
(gdb) cont
Continuing.

Breakpoint 6.3, AsymmetricStreamingXDiff::diff (this=0x7ffff4e00a30,
    against=...) at diff_xdiff.cpp:680
680         zinc::generator<Diff> diff(zinc::generator<std::string_view> 
against)

here against is going to yield "lines" of "a", "b", and "c", and the diff has 
been seeded with a document containing "a\nb\nc\n".
it's supposed to figure out the two things are equal.

it figures out only the first line is equal.

here's the body:
689             size_t l1 = 0, l2 = 0;
690             size_t tot2 = 0;
691             for (auto && new_line : against) {
692                 extend_env(new_line);
693                 if (dynxdfs[1].size() >= window_size) {
694                     do_diff();
(gdb)
695                     co_yield get_diff_for(l1, l2);
696                     // if l1 or l2 overflows this likely means that file 1 
was exhausted while there were still matching values in file 2 for some reason. 
maybe they weren't passed through nreff?
697                     while (l1) {
698                         dynxdfs[0].consume();
699                         -- l1;
700                     }
701                     tot2 += l2;
702                     while (l2) {
703                         dynxdfs[1].consume();
704                         -- l2;
(gdb)
705                     }
706                     /*dbg: consume window*/
707                 }
708             }
709             do_diff();
710
711             while (l1 < dynxdfs[0].size() || l2 < dynxdfs[1].size()) {
712                 co_yield get_diff_for(l1, l2);
713             }

Reply via email to