heap.js icon indicating copy to clipboard operation
heap.js copied to clipboard

Strange behavior after clone

Open AlexMost opened this issue 8 years ago • 3 comments

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.

AlexMost avatar Feb 24 '17 09:02 AlexMost

Is this project active? Shall I look in to this issue?

safwan-moha avatar May 17 '19 14:05 safwan-moha

The same clone issue also mentioned here

char8x avatar Aug 15 '22 02:08 char8x

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.

KyleJune avatar Aug 15 '22 03:08 KyleJune