| // Copyright (C) 2016 Rick Waldron. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| function shouldBe(actual, expected) |
| { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| { |
| let capture = []; |
| let leftValue = { valueOf() { capture.push("leftValue"); return 3; }}; |
| let rightValue = { valueOf() { capture.push("rightValue"); return 2; }}; |
| |
| (capture.push("left"), leftValue) ** +(capture.push("right"), rightValue); |
| // ^ |
| // Changes the order |
| |
| // Expected per operator evaluation order: "left", "right", "rightValue", "leftValue" |
| shouldBe(capture[0], "left"); |
| shouldBe(capture[1], "right"); |
| shouldBe(capture[2], "rightValue"); |
| shouldBe(capture[3], "leftValue"); |
| } |
| |
| { |
| let capture = []; |
| let leftValue = { valueOf() { capture.push("leftValue"); return 3; }}; |
| let rightValue = { valueOf() { capture.push("rightValue"); return 2; }}; |
| |
| (+(capture.push("left"), leftValue)) ** (capture.push("right"), rightValue); |
| // ^ |
| // Changes the order |
| |
| // Expected per operator evaluation order: "left", "right", "rightValue", "leftValue" |
| shouldBe(capture[0], "left"); |
| shouldBe(capture[1], "leftValue"); |
| shouldBe(capture[2], "right"); |
| shouldBe(capture[3], "rightValue"); |
| } |