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

// Basic test of Symbol class.

main() {
  var x;
  print(x = const Symbol('fisk'));
  try {
    print(const Symbol(0)); //# 01: compile-time error
  } on NoSuchMethodError {
    print('Caught NoSuchMethodError');
  } on TypeError {
    print('Caught TypeError');
  }

  try {
    print(const Symbol('0')); //# 02: compile-time error
  } on ArgumentError catch (e) {
    print('Caught $e');
  }

  try {
    print(const Symbol('_')); //# 03: compile-time error
  } on ArgumentError catch (e) {
    print('Caught $e');
  }

  try {
    print(new Symbol('0'));
    throw 'Expected an ArgumentError';
  } on ArgumentError catch (e) {
    print('Caught $e');
  }

  try {
    print(new Symbol('_'));
    throw 'Expected an ArgumentError';
  } on ArgumentError catch (e) {
    print('Caught $e');
  }

  if (!identical(const Symbol('fisk'), x)) {
    throw 'Symbol constant is not canonicalized';
  }

  if (const Symbol('fisk') != x) {
    throw 'Symbol constant is not equal to itself';
  }

  if (const Symbol('fisk') != new Symbol('fisk')) {
    throw 'Symbol constant is not equal to its non-const equivalent';
  }

  if (new Symbol('fisk') != new Symbol('fisk')) {
    throw 'new Symbol is not equal to its equivalent';
  }

  if (new Symbol('fisk') == new Symbol('hest')) {
    throw 'unrelated Symbols are equal';
  }

  if (new Symbol('fisk') == new Object()) {
    throw 'unrelated objects are equal';
  }

  x.hashCode as int;

  new Symbol('fisk').hashCode as int;

  if (new Symbol('fisk').hashCode != x.hashCode) {
    throw "non-const Symbol's hashCode not equal to its const equivalent";
  }

  if (new Symbol('') != Symbol.empty) {
    throw 'empty Symbol not equals to itself';
  }
}
