| // Copyright (c) 2023, 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. | |
| // Test that all the expression types permitted by the grammar are allowed | |
| // inside a relational pattern. | |
| import 'package:expect/expect.dart'; | |
| void usingEquals() { | |
| // bitwiseOrExpression | |
| Expect.isTrue(switch (7) { | |
| == 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isTrue(switch (3) { | |
| == 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isTrue(switch (4) { | |
| == 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isTrue(switch (4) { | |
| == 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| == 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isTrue(switch (4) { | |
| == 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| == 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isTrue(switch (10) { | |
| == 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2.5) { | |
| == 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| == 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| == 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isTrue(switch (-3) { | |
| == -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (true) { | |
| == !false => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (~3) { | |
| == ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isTrue(switch (3) { | |
| == 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isTrue(switch ('xyz') { | |
| == 'xyz' => true, | |
| _ => false, | |
| }); | |
| } | |
| void usingNotEquals() { | |
| // bitwiseOrExpression | |
| Expect.isFalse(switch (7) { | |
| != 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isFalse(switch (3) { | |
| != 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isFalse(switch (4) { | |
| != 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isFalse(switch (4) { | |
| != 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| != 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isFalse(switch (4) { | |
| != 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| != 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isFalse(switch (10) { | |
| != 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2.5) { | |
| != 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| != 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| != 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isFalse(switch (-3) { | |
| != -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (true) { | |
| != !false => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (~3) { | |
| != ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isFalse(switch (3) { | |
| != 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isFalse(switch ('xyz') { | |
| != 'xyz' => true, | |
| _ => false, | |
| }); | |
| } | |
| void usingLessThanOrEquals() { | |
| // bitwiseOrExpression | |
| Expect.isTrue(switch (7) { | |
| <= 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isTrue(switch (3) { | |
| <= 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isTrue(switch (4) { | |
| <= 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isTrue(switch (4) { | |
| <= 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| <= 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isTrue(switch (4) { | |
| <= 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| <= 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isTrue(switch (10) { | |
| <= 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2.5) { | |
| <= 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| <= 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| <= 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isTrue(switch (-3) { | |
| <= -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (~3) { | |
| <= ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isTrue(switch (3) { | |
| <= 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isTrue(switch (3) { | |
| <= 3 => true, | |
| _ => false, | |
| }); | |
| } | |
| void usingLessThan() { | |
| // bitwiseOrExpression | |
| Expect.isFalse(switch (7) { | |
| < 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isFalse(switch (3) { | |
| < 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isFalse(switch (4) { | |
| < 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isFalse(switch (4) { | |
| < 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| < 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isFalse(switch (4) { | |
| < 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| < 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isFalse(switch (10) { | |
| < 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2.5) { | |
| < 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| < 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| < 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isFalse(switch (-3) { | |
| < -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (~3) { | |
| < ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isFalse(switch (3) { | |
| < 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isFalse(switch (3) { | |
| < 3 => true, | |
| _ => false, | |
| }); | |
| } | |
| void usingGreaterThanOrEquals() { | |
| // bitwiseOrExpression | |
| Expect.isTrue(switch (7) { | |
| >= 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isTrue(switch (3) { | |
| >= 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isTrue(switch (4) { | |
| >= 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isTrue(switch (4) { | |
| >= 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| >= 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isTrue(switch (4) { | |
| >= 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| >= 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isTrue(switch (10) { | |
| >= 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2.5) { | |
| >= 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (1) { | |
| >= 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (2) { | |
| >= 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isTrue(switch (-3) { | |
| >= -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isTrue(switch (~3) { | |
| >= ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isTrue(switch (3) { | |
| >= 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isTrue(switch (3) { | |
| >= 3 => true, | |
| _ => false, | |
| }); | |
| } | |
| void usingGreaterThan() { | |
| // bitwiseOrExpression | |
| Expect.isFalse(switch (7) { | |
| > 5 | 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseXorExpression | |
| Expect.isFalse(switch (3) { | |
| > 5 ^ 6 => true, | |
| _ => false, | |
| }); | |
| // bitwiseAndExpression | |
| Expect.isFalse(switch (4) { | |
| > 5 & 6 => true, | |
| _ => false, | |
| }); | |
| // shiftExpression | |
| Expect.isFalse(switch (4) { | |
| > 1 << 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| > 4 >> 2 => true, | |
| _ => false, | |
| }); | |
| // additiveExpression | |
| Expect.isFalse(switch (4) { | |
| > 3 + 1 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| > 3 - 1 => true, | |
| _ => false, | |
| }); | |
| // multiplicativeExpression | |
| Expect.isFalse(switch (10) { | |
| > 5 * 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2.5) { | |
| > 5 / 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (1) { | |
| > 5 % 2 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (2) { | |
| > 5 ~/ 2 => true, | |
| _ => false, | |
| }); | |
| // unaryExpression | |
| Expect.isFalse(switch (-3) { | |
| > -3 => true, | |
| _ => false, | |
| }); | |
| Expect.isFalse(switch (~3) { | |
| > ~3 => true, | |
| _ => false, | |
| }); | |
| // assignableExpression | |
| Expect.isFalse(switch (3) { | |
| > 'foo'.length => true, | |
| _ => false, | |
| }); | |
| // primary | |
| Expect.isFalse(switch (3) { | |
| > 3 => true, | |
| _ => false, | |
| }); | |
| } | |
| main() { | |
| usingEquals(); | |
| usingNotEquals(); | |
| usingLessThanOrEquals(); | |
| usingLessThan(); | |
| usingGreaterThanOrEquals(); | |
| usingGreaterThan(); | |
| } |