/*
 * Copyright (c) 2015, 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.
 */
/**
 * @assertion The declaration of an enum of the form 
 * metadata enum E { id 0 , . . . id n−1 };
 * has the same effect as a class declaration
 * metadata class E {
 * final int index;
 * const E(this.index);
 * static const E id 0 = const E(0);
 * ...
 * static const E id n−1 = const E(n - 1);
 * static const List<E> values = const <E>[id 0 . . . id n−1 ];
 * String toString() => { 0: ‘E.id 0 ’, . . ., n-1: ‘E.id n−1 ’}[index]
 * }
 * @description Checks that enum index value match declaration order
 * @author sgrekhov@unipro.ru
 */

import "../../Utils/expect.dart";

enum E {a, b, c}

main() {
  E e = E.a;
  Expect.equals(e.index, 0); 
  e = E.b;
  Expect.equals(e.index, 1); 
  e = E.c;
  Expect.equals(e.index, 2); 
}
