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

// @dart = 2.9

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