heap.js
heap.js copied to clipboard
Strange behavior after clone
const Heap = require('heap');
function msgidComparator(e1, e2) {
if (e1.msgid > e2.msgid) {
return 1;
}
if (e2.msgid > e1.msgid) {
return -1;
}
return 0;
}
const data = [
{ msgid: 'aaaaa', msgstr: '' },
{ msgid: 'ccccc', msgstr: '' },
{ msgid: 'eeeee', msgstr: '' },
{ msgid: 'bbbb', msgstr: '' },
{ msgid: 'fffff', msgstr: '' }
]
const h = new Heap(msgidComparator);
h.push(data[0]);
h.push(data[1]);
h.push(data[2]);
h.push(data[3]);
h.push(data[4]);
const h1 = h.copy();
console.log(h1.pop());
console.log(h1.pop());
console.log(h1.pop());
console.log(h1.pop());
console.log(h1.pop());
Expected to see:
{ msgid: 'aaaaa', msgstr: '' }
{ msgid: 'bbbb', msgstr: '' }
{ msgid: 'ccccc', msgstr: '' }
{ msgid: 'eeeee', msgstr: '' }
{ msgid: 'fffff', msgstr: '' }
but have instead
{ msgid: 'aaaaa', msgstr: '' }
{ msgid: 'eeeee', msgstr: '' }
{ msgid: 'fffff', msgstr: '' }
{ msgid: 'bbbb', msgstr: '' }
{ msgid: 'ccccc', msgstr: '' }
Original object behaves well, the order is correct but clone seems to be broken.
Is this project active? Shall I look in to this issue?
The same clone
issue also mentioned here
I believe the issue is that the internal data gets copied as is but the compare function used by the heap does not get copied. The clone ends up using the default compare function for all operations done on it.