var x = 0; function test() { function sincos1(a, b) { var sa = Math.sin(a); var sb = Math.sin(b); var ca = Math.cos(a); var cb = Math.cos(b); var ra = sa * sa + ca * ca; var rb = sb * sb + cb * cb; var dec = 100000; assertEq(Math.round(ra * dec) / dec, Math.round(rb * dec) / dec); ca = Math.cos(a); cb = Math.cos(b); sa = Math.sin(a); sb = Math.sin(b); var ra = sa * sa + ca * ca; var rb = sb * sb + cb * cb; assertEq(Math.round(ra * dec) / dec, Math.round(rb * dec) / dec); return ra; } function sincos2(x) { var s1 = Math.sin(x); var c1 = Math.cos(x); var c2 = Math.cos(x); var s2 = Math.sin(x); return (s1 * s1 + c1 * c1) - (s2 * s2 + c2 * c2); } function bailoutHere() { bailout(); } function sincos3(x) { var s = Math.sin(x); bailoutHere(); var c = Math.cos(x); assertEq(Math.round(s * s + c * c), 1); return s; } function sincos4(x) { if (x < 2500) x = Math.sin(x); else x = Math.cos(x); return x; } for (var i=0; i<5000; i++) { x += sincos1(x, x + 1); x += sincos2(x); x += sincos3(x); x += sincos4(i); } } x += 1; test();