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