function g1(x, y) {
    return 0 & y;
}
var c1 = 0;
function f1() {
    for (var i=0; i<100; i++) {
        g1(i, i);
        g1(i, {valueOf: function() { c1++; return 0; }});
    }
}
f1();
assertEq(c1, 100);

function g2(x, y) {
    ~y;
}
var c2 = 0;
function f2() {
    for (var i=0; i<100; i++) {
        g2(i, i);
        g2(i, {valueOf: function() { c2++; return 0; }});
    }
}
f2();
assertEq(c2, 100);

function g3(x, y) {
    return 0 >>> y;
}
var c3 = 0;
function f3() {
    for (var i=0; i<100; i++) {
        g3(i, i);
        g3(i, {valueOf: function() { c3++; return 0; }});
    }
}
f3();
assertEq(c3, 100);