michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: var BUGNUMBER = 433672; michael@0: var summary = 'operator evaluation order'; michael@0: var actual = ''; michael@0: var expect = ''; michael@0: michael@0: function makeObject(label) michael@0: { michael@0: var o = (function (){}); michael@0: michael@0: o.label = label; michael@0: o.valueOf = (function() { actual += this.label + ' valueOf, '; return Object.prototype.valueOf.call(this); }); michael@0: o.toString = (function() { actual += this.label + ' toString, '; return Object.prototype.toString.call(this); }); michael@0: michael@0: return o; michael@0: } michael@0: michael@0: operators = [ michael@0: {section: '11.5.1', operator: '*'}, michael@0: {section: '11.5.2', operator: '/'}, michael@0: {section: '11.5.3', operator: '%'}, michael@0: {section: '11.6.1', operator: '+'}, michael@0: {section: '11.6.2', operator: '-'}, michael@0: {section: '11.7.1', operator: '<<'}, michael@0: {section: '11.7.2', operator: '>>'}, michael@0: {section: '11.7.3', operator: '>>>'}, michael@0: {section: '11.8.1', operator: '<'}, michael@0: {section: '11.8.2', operator: '>'}, michael@0: {section: '11.8.3', operator: '<='}, michael@0: {section: '11.8.4', operator: '>='}, michael@0: {section: '11.10', operator: '&'}, michael@0: {section: '11.10', operator: '^'}, michael@0: {section: '11.10', operator: '|'}, michael@0: {section: '11.13.2', operator: '*='}, michael@0: {section: '11.13.2', operator: '/='}, michael@0: {section: '11.13.2', operator: '%='}, michael@0: {section: '11.13.2', operator: '+='}, michael@0: {section: '11.13.2', operator: '<<='}, michael@0: {section: '11.13.2', operator: '>>='}, michael@0: {section: '11.13.2', operator: '>>>='}, michael@0: {section: '11.13.2', operator: '&='}, michael@0: {section: '11.13.2', operator: '^='}, michael@0: {section: '11.13.2', operator: '|='}, michael@0: ]; michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: for (var i = 0; i < operators.length; i++) michael@0: { michael@0: expect = 'left valueOf, left toString, right valueOf, right toString, '; michael@0: actual = ''; michael@0: michael@0: var left = makeObject('left'); michael@0: var right = makeObject('right'); michael@0: michael@0: eval('left ' + operators[i].operator + ' right'); michael@0: michael@0: reportCompare(expect, actual, summary + ': ' + operators[i].section + ' ' + operators[i].operator); michael@0: } michael@0: michael@0: exitFunc ('test'); michael@0: }