| // 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(); |
| } |