// 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.

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