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

import "package:expect/expect.dart";

// Test of compile time constant local variables.

const N = 8;

class ConstFoo {
  final x;
  const ConstFoo(this.x);
}

main() {
  const MIN = 2 - 1;
  const MAX = N * 2;
  const MASK = (1 << (MAX - MIN + 1)) - 1; // 65535.
  Expect.equals(1, MIN);
  Expect.equals(16, MAX);
  Expect.equals(65535, MASK);
  const s = 'MIN = $MIN  MAX = $MAX  MASK = $MASK';
  Expect.identical(s, 'MIN = $MIN  MAX = $MAX  MASK = $MASK');
  Expect.equals("MIN = 1  MAX = 16  MASK = 65535", s);
  var cf1 = const ConstFoo(MASK);
  var cf2 = const ConstFoo(s);
  var cf3 = const ConstFoo('MIN = $MIN  MAX = $MAX  MASK = $MASK');
  Expect.identical(cf2, cf3);
  Expect.isFalse(identical(cf2, cf1));
}
