// Copyright (c) 2022, 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.

// @dart = 2.9

// Test switches that use binary search or a jump table to dispatch cases.

import 'package:expect/expect.dart';

void main() {
  Expect.isTrue(duplicateEnum(L._0) == 0);
  Expect.isTrue(duplicateEnum(L._1) == 1);
  Expect.isTrue(duplicateEnum(L._2) == 2);
  Expect.isTrue(duplicateEnum(L._3) == null);

  Expect.isTrue(duplicateInt(0) == 0);
  Expect.isTrue(duplicateInt(1) == 1);
  Expect.isTrue(duplicateInt(2) == 2);
  Expect.isTrue(duplicateInt(3) == null);

  Expect.isTrue(binarySearchEnumExhaustive(S._0) == 0);
  Expect.isTrue(binarySearchEnumExhaustive(S._1) == 1);
  Expect.isTrue(binarySearchEnumExhaustive(S._2) == 2);

  Expect.isTrue(binarySearchEnumWithDefault(null) == null);
  Expect.isTrue(binarySearchEnumWithDefault(S._0) == 0);
  Expect.isTrue(binarySearchEnumWithDefault(S._1) == null);
  Expect.isTrue(binarySearchEnumWithDefault(S._2) == 2);

  Expect.isTrue(binarySearchEnumHole(S._0) == 0);
  Expect.isTrue(binarySearchEnumHole(S._1) == null);
  Expect.isTrue(binarySearchEnumHole(S._2) == 2);

  Expect.isTrue(binarySearchEnumNoLowerBound(S._0) == null);
  Expect.isTrue(binarySearchEnumNoLowerBound(S._1) == 1);
  Expect.isTrue(binarySearchEnumNoLowerBound(S._2) == 2);

  Expect.isTrue(binarySearchEnumNoUpperBound(S._0) == 0);
  Expect.isTrue(binarySearchEnumNoUpperBound(S._1) == 1);
  Expect.isTrue(binarySearchEnumNoUpperBound(S._2) == null);

  Expect.isTrue(binarySearchInt(-2) == null);
  Expect.isTrue(binarySearchInt(-1) == -1);
  Expect.isTrue(binarySearchInt(0) == 0);
  Expect.isTrue(binarySearchInt(1) == 1);
  Expect.isTrue(binarySearchInt(2) == null);

  Expect.isTrue(binarySearchIntWithDefault(null) == null);
  Expect.isTrue(binarySearchIntWithDefault(-1) == null);
  Expect.isTrue(binarySearchIntWithDefault(0) == 0);
  Expect.isTrue(binarySearchIntWithDefault(1) == null);
  Expect.isTrue(binarySearchIntWithDefault(2) == 2);
  Expect.isTrue(binarySearchIntWithDefault(3) == null);

  Expect.isTrue(jumpTableEnumExhaustive(L._0) == 0);
  Expect.isTrue(jumpTableEnumExhaustive(L._1) == 1);
  Expect.isTrue(jumpTableEnumExhaustive(L._2) == 2);
  Expect.isTrue(jumpTableEnumExhaustive(L._3) == 3);
  Expect.isTrue(jumpTableEnumExhaustive(L._4) == 4);
  Expect.isTrue(jumpTableEnumExhaustive(L._5) == 5);
  Expect.isTrue(jumpTableEnumExhaustive(L._6) == 6);
  Expect.isTrue(jumpTableEnumExhaustive(L._7) == 7);
  Expect.isTrue(jumpTableEnumExhaustive(L._8) == 8);
  Expect.isTrue(jumpTableEnumExhaustive(L._9) == 9);
  Expect.isTrue(jumpTableEnumExhaustive(L._10) == 10);
  Expect.isTrue(jumpTableEnumExhaustive(L._11) == 11);
  Expect.isTrue(jumpTableEnumExhaustive(L._12) == 12);
  Expect.isTrue(jumpTableEnumExhaustive(L._13) == 13);
  Expect.isTrue(jumpTableEnumExhaustive(L._14) == 14);
  Expect.isTrue(jumpTableEnumExhaustive(L._15) == 15);
  Expect.isTrue(jumpTableEnumExhaustive(L._16) == 16);

  Expect.isTrue(jumpTableEnumWithDefault(null) == null);
  Expect.isTrue(jumpTableEnumWithDefault(L._0) == 0);
  Expect.isTrue(jumpTableEnumWithDefault(L._1) == 1);
  Expect.isTrue(jumpTableEnumWithDefault(L._2) == 2);
  Expect.isTrue(jumpTableEnumWithDefault(L._3) == 3);
  Expect.isTrue(jumpTableEnumWithDefault(L._4) == 4);
  Expect.isTrue(jumpTableEnumWithDefault(L._5) == 5);
  Expect.isTrue(jumpTableEnumWithDefault(L._6) == 6);
  Expect.isTrue(jumpTableEnumWithDefault(L._7) == 7);
  Expect.isTrue(jumpTableEnumWithDefault(L._8) == null);
  Expect.isTrue(jumpTableEnumWithDefault(L._9) == 9);
  Expect.isTrue(jumpTableEnumWithDefault(L._10) == 10);
  Expect.isTrue(jumpTableEnumWithDefault(L._11) == 11);
  Expect.isTrue(jumpTableEnumWithDefault(L._12) == 12);
  Expect.isTrue(jumpTableEnumWithDefault(L._13) == 13);
  Expect.isTrue(jumpTableEnumWithDefault(L._14) == 14);
  Expect.isTrue(jumpTableEnumWithDefault(L._15) == 15);
  Expect.isTrue(jumpTableEnumWithDefault(L._16) == 16);

  Expect.isTrue(jumpTableEnumHole(L._0) == 0);
  Expect.isTrue(jumpTableEnumHole(L._1) == null);
  Expect.isTrue(jumpTableEnumHole(L._2) == 2);
  Expect.isTrue(jumpTableEnumHole(L._3) == 3);
  Expect.isTrue(jumpTableEnumHole(L._4) == 4);
  Expect.isTrue(jumpTableEnumHole(L._5) == 5);
  Expect.isTrue(jumpTableEnumHole(L._6) == 6);
  Expect.isTrue(jumpTableEnumHole(L._7) == 7);
  Expect.isTrue(jumpTableEnumHole(L._8) == 8);
  Expect.isTrue(jumpTableEnumHole(L._9) == 9);
  Expect.isTrue(jumpTableEnumHole(L._10) == 10);
  Expect.isTrue(jumpTableEnumHole(L._11) == 11);
  Expect.isTrue(jumpTableEnumHole(L._12) == 12);
  Expect.isTrue(jumpTableEnumHole(L._13) == 13);
  Expect.isTrue(jumpTableEnumHole(L._14) == 14);
  Expect.isTrue(jumpTableEnumHole(L._15) == 15);
  Expect.isTrue(jumpTableEnumHole(L._16) == 16);

  Expect.isTrue(jumpTableEnumNoLowerBound(L._0) == null);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._1) == 1);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._2) == 2);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._3) == 3);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._4) == 4);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._5) == 5);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._6) == 6);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._7) == 7);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._8) == 8);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._9) == 9);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._10) == 10);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._11) == 11);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._12) == 12);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._13) == 13);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._14) == 14);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._15) == 15);
  Expect.isTrue(jumpTableEnumNoLowerBound(L._16) == 16);

  Expect.isTrue(jumpTableEnumNoUpperBound(L._0) == 0);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._1) == 1);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._2) == 2);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._3) == 3);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._4) == 4);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._5) == 5);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._6) == 6);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._7) == 7);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._8) == 8);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._9) == 9);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._10) == 10);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._11) == 11);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._12) == 12);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._13) == 13);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._14) == 14);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._15) == 15);
  Expect.isTrue(jumpTableEnumNoUpperBound(L._16) == null);

  Expect.isTrue(jumpTableInt(-2) == null);
  Expect.isTrue(jumpTableInt(-1) == -1);
  Expect.isTrue(jumpTableInt(0) == 0);
  Expect.isTrue(jumpTableInt(1) == 1);
  Expect.isTrue(jumpTableInt(2) == 2);
  Expect.isTrue(jumpTableInt(3) == 3);
  Expect.isTrue(jumpTableInt(4) == 4);
  Expect.isTrue(jumpTableInt(5) == 5);
  Expect.isTrue(jumpTableInt(6) == 6);
  Expect.isTrue(jumpTableInt(7) == 7);
  Expect.isTrue(jumpTableInt(8) == 8);
  Expect.isTrue(jumpTableInt(9) == 9);
  Expect.isTrue(jumpTableInt(10) == 10);
  Expect.isTrue(jumpTableInt(11) == 11);
  Expect.isTrue(jumpTableInt(12) == 12);
  Expect.isTrue(jumpTableInt(13) == 13);
  Expect.isTrue(jumpTableInt(14) == 14);
  Expect.isTrue(jumpTableInt(15) == null);

  Expect.isTrue(jumpTableIntWithDefault(null) == null);
  Expect.isTrue(jumpTableIntWithDefault(-1) == null);
  Expect.isTrue(jumpTableIntWithDefault(0) == 0);
  Expect.isTrue(jumpTableIntWithDefault(1) == 1);
  Expect.isTrue(jumpTableIntWithDefault(2) == 2);
  Expect.isTrue(jumpTableIntWithDefault(3) == 3);
  Expect.isTrue(jumpTableIntWithDefault(4) == 4);
  Expect.isTrue(jumpTableIntWithDefault(5) == 5);
  Expect.isTrue(jumpTableIntWithDefault(6) == 6);
  Expect.isTrue(jumpTableIntWithDefault(7) == 7);
  Expect.isTrue(jumpTableIntWithDefault(8) == null);
  Expect.isTrue(jumpTableIntWithDefault(9) == 9);
  Expect.isTrue(jumpTableIntWithDefault(10) == 10);
  Expect.isTrue(jumpTableIntWithDefault(11) == 11);
  Expect.isTrue(jumpTableIntWithDefault(12) == 12);
  Expect.isTrue(jumpTableIntWithDefault(13) == 13);
  Expect.isTrue(jumpTableIntWithDefault(14) == 14);
  Expect.isTrue(jumpTableIntWithDefault(15) == 15);
  Expect.isTrue(jumpTableIntWithDefault(16) == 16);
  Expect.isTrue(jumpTableIntWithDefault(17) == null);
}

/// Small enum that is used to test binary search switches.
enum S {
  _0,
  _1,
  _2,
}

/// Large enum that is used to test jump table switches.
///
/// Must have enough values to trigger a jump table (currently 16) + 1 so
/// we can create a jump table switch that is not exhaustive.
enum L {
  _0,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16,
}

int duplicateEnum(L v) {
  switch (v) {
    case L._0:
      return 0;
    case L._1:
      return 1;
    case L._2:
      return 2;
    case L._1:
      return 3;
  }
}

int duplicateInt(int v) {
  switch (v) {
    case 0:
      return 0;
    case 1:
      return 1;
    case 2:
      return 2;
    case 1:
      return 3;
  }
}

int binarySearchEnumExhaustive(S v) {
  switch (v) {
    case S._0:
      return 0;
    case S._1:
      return 1;
    case S._2:
      return 2;
  }
}

int binarySearchEnumWithDefault(S v) {
  switch (v) {
    case S._0:
      return 0;
    case S._2:
      return 2;
    default:
      return null;
  }
}

int binarySearchEnumHole(S v) {
  switch (v) {
    case S._0:
      return 0;
    case S._2:
      return 2;
  }
}

int binarySearchEnumNoLowerBound(S v) {
  switch (v) {
    case S._1:
      return 1;
    case S._2:
      return 2;
  }
}

int binarySearchEnumNoUpperBound(S v) {
  switch (v) {
    case S._0:
      return 0;
    case S._1:
      return 1;
  }
}

int binarySearchInt(int v) {
  switch (v) {
    case -1:
      return -1;
    case 0:
      return 0;
    case 1:
      return 1;
  }
}

int binarySearchIntWithDefault(int v) {
  switch (v) {
    case 0:
      return 0;
    case 2:
      return 2;
    default:
      return null;
  }
}

int jumpTableEnumExhaustive(L v) {
  switch (v) {
    case L._0:
      return 0;
    case L._1:
      return 1;
    case L._2:
      return 2;
    case L._3:
      return 3;
    case L._4:
      return 4;
    case L._5:
      return 5;
    case L._6:
      return 6;
    case L._7:
      return 7;
    case L._8:
      return 8;
    case L._9:
      return 9;
    case L._10:
      return 10;
    case L._11:
      return 11;
    case L._12:
      return 12;
    case L._13:
      return 13;
    case L._14:
      return 14;
    case L._15:
      return 15;
    case L._16:
      return 16;
  }
}

int jumpTableEnumWithDefault(L v) {
  switch (v) {
    case L._0:
      return 0;
    case L._1:
      return 1;
    case L._2:
      return 2;
    case L._3:
      return 3;
    case L._4:
      return 4;
    case L._5:
      return 5;
    case L._6:
      return 6;
    case L._7:
      return 7;
    case L._9:
      return 9;
    case L._10:
      return 10;
    case L._11:
      return 11;
    case L._12:
      return 12;
    case L._13:
      return 13;
    case L._14:
      return 14;
    case L._15:
      return 15;
    case L._16:
      return 16;
    default:
      return null;
  }
}

int jumpTableEnumHole(L v) {
  switch (v) {
    case L._0:
      return 0;
    case L._2:
      return 2;
    case L._3:
      return 3;
    case L._4:
      return 4;
    case L._5:
      return 5;
    case L._6:
      return 6;
    case L._7:
      return 7;
    case L._8:
      return 8;
    case L._9:
      return 9;
    case L._10:
      return 10;
    case L._11:
      return 11;
    case L._12:
      return 12;
    case L._13:
      return 13;
    case L._14:
      return 14;
    case L._15:
      return 15;
    case L._16:
      return 16;
  }
}

int jumpTableEnumNoLowerBound(L v) {
  switch (v) {
    case L._1:
      return 1;
    case L._2:
      return 2;
    case L._3:
      return 3;
    case L._4:
      return 4;
    case L._5:
      return 5;
    case L._6:
      return 6;
    case L._7:
      return 7;
    case L._8:
      return 8;
    case L._9:
      return 9;
    case L._10:
      return 10;
    case L._11:
      return 11;
    case L._12:
      return 12;
    case L._13:
      return 13;
    case L._14:
      return 14;
    case L._15:
      return 15;
    case L._16:
      return 16;
  }
}

int jumpTableEnumNoUpperBound(L v) {
  switch (v) {
    case L._0:
      return 0;
    case L._1:
      return 1;
    case L._2:
      return 2;
    case L._3:
      return 3;
    case L._4:
      return 4;
    case L._5:
      return 5;
    case L._6:
      return 6;
    case L._7:
      return 7;
    case L._8:
      return 8;
    case L._9:
      return 9;
    case L._10:
      return 10;
    case L._11:
      return 11;
    case L._12:
      return 12;
    case L._13:
      return 13;
    case L._14:
      return 14;
    case L._15:
      return 15;
  }
}

int jumpTableInt(int v) {
  switch (v) {
    case -1:
      return -1;
    case 0:
      return 0;
    case 1:
      return 1;
    case 2:
      return 2;
    case 3:
      return 3;
    case 4:
      return 4;
    case 5:
      return 5;
    case 6:
      return 6;
    case 7:
      return 7;
    case 8:
      return 8;
    case 9:
      return 9;
    case 10:
      return 10;
    case 11:
      return 11;
    case 12:
      return 12;
    case 13:
      return 13;
    case 14:
      return 14;
  }
}

int jumpTableIntWithDefault(int v) {
  switch (v) {
    case 0:
      return 0;
    case 1:
      return 1;
    case 2:
      return 2;
    case 3:
      return 3;
    case 4:
      return 4;
    case 5:
      return 5;
    case 6:
      return 6;
    case 7:
      return 7;
    case 9:
      return 9;
    case 10:
      return 10;
    case 11:
      return 11;
    case 12:
      return 12;
    case 13:
      return 13;
    case 14:
      return 14;
    case 15:
      return 15;
    case 16:
      return 16;
    default:
      return null;
  }
}
