var friends = require("friends"); a = new friends.A(2); if (friends.get_val1(a) != 2) { throw new Error; } if (friends.get_val2(a) != 4) { throw new Error; } if (friends.get_val3(a) != 6) { throw new Error; } // nice overload working fine if (friends.get_val1(1, 2, 3) != 1) { throw new Error; } b = new friends.B(3); // David's case if (friends.mix(a, b) != 5) { throw new Error; } di = new friends.D_i(2); dd = new friends.D_d(3.3); // incredible template overloading working just fine if (friends.get_val1(di) != 2) { throw new Error; } if (friends.get_val1(dd) != 3.3) { throw new Error; } friends.set(di, 4); friends.set(dd, 1.3); if (friends.get_val1(di) != 4) { throw new Error; } if (friends.get_val1(dd) != 1.3) { throw new Error; } if (friends.chum_blah() != 1234) { throw new Error("failed"); } if (friends.mate_blah() != 4321) { throw new Error("failed"); }