| // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import "package:expect/expect.dart"; |
| |
| // Tests basic expressions. Does not attempt to validate the details of arithmetic, coercion, and |
| // so forth. |
| class ExpressionTest { |
| |
| ExpressionTest() {} |
| |
| int foo; |
| |
| static testMain() { |
| var test = new ExpressionTest(); |
| test.testBinary(); |
| test.testUnary(); |
| test.testShifts(); |
| test.testBitwise(); |
| test.testIncrement(); |
| test.testMangling(); |
| } |
| |
| testBinary() { |
| int x = 4, y = 2; |
| Expect.equals(6, x + y); |
| Expect.equals(2, x - y); |
| Expect.equals(8, x * y); |
| Expect.equals(2, x / y); |
| Expect.equals(0, x % y); |
| } |
| |
| testUnary() { |
| int x = 4, y = 2, z = -5; |
| bool t = true, f = false; |
| Expect.equals(-4, -x); |
| Expect.equals(4, ~z); |
| Expect.equals(f, !t); |
| } |
| |
| testShifts() { |
| int x = 4, y = 2; |
| Expect.equals(y, x >> 1); |
| Expect.equals(x, y << 1); |
| } |
| |
| testBitwise() { |
| int x = 4, y = 2; |
| Expect.equals(6, (x | y)); |
| Expect.equals(0, (x & y)); |
| Expect.equals(6, (x ^ y)); |
| } |
| |
| operator [](int index) { |
| return foo; |
| } |
| |
| operator []=(int index, int value) { |
| foo = value; |
| } |
| |
| testIncrement() { |
| int x = 4, a = x++; |
| Expect.equals(4, a); |
| Expect.equals(5, x); |
| Expect.equals(6, ++x); |
| Expect.equals(6, x++); |
| Expect.equals(7, x); |
| Expect.equals(6, --x); |
| Expect.equals(6, x--); |
| Expect.equals(5, x); |
| |
| this.foo = 0; |
| Expect.equals(0, this.foo++); |
| Expect.equals(1, this.foo); |
| Expect.equals(2, ++this.foo); |
| Expect.equals(2, this.foo); |
| Expect.equals(2, this.foo--); |
| Expect.equals(1, this.foo); |
| Expect.equals(0, --this.foo); |
| Expect.equals(0, this.foo); |
| |
| Expect.equals(0, this[0]++); |
| Expect.equals(1, this[0]); |
| Expect.equals(2, ++this[0]); |
| Expect.equals(2, this[0]); |
| Expect.equals(2, this[0]--); |
| Expect.equals(1, this[0]); |
| Expect.equals(0, --this[0]); |
| Expect.equals(0, this[0]); |
| |
| int $0 = 42, $1 = 87, $2 = 117; |
| Expect.equals(42, $0++); |
| Expect.equals(43, $0); |
| Expect.equals(44, ++$0); |
| Expect.equals(88, $0 += $0); |
| Expect.equals(87, $1++); |
| Expect.equals(88, $1); |
| Expect.equals(89, ++$1); |
| Expect.equals(178, ($1 += $1)); |
| Expect.equals(117, $2++); |
| Expect.equals(118, $2); |
| Expect.equals(119, ++$2); |
| } |
| |
| void testMangling() { |
| int $0 = 42, $1 = 87, $2 = 117; |
| this[0] = 0; |
| Expect.equals(42, (this[0] += $0)); |
| Expect.equals(129, (this[0] += $1)); |
| Expect.equals(246, (this[0] += $2)); |
| } |
| } |
| |
| main() { |
| ExpressionTest.testMain(); |
| } |