// Copyright (c) 2017, 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.
// VMOptions=--assert_initializer
//
// Dart test program testing assert statements.

import "package:expect/expect.dart";

class C {
  static bool staticTrue() => true;
  final int x;
  const C(this.x);
  // The expression *is* compile-time constant, but not a bool value.
  // Static warning, runtime always fails assertion.
  const C.bc01(this.x, y)
      : assert(staticTrue)  //# 01: static type warning
      ;
}

main() {
  bool checkedMode = false;
  assert(checkedMode = true);
  if (checkedMode) {                                              //# 01: continued
    Expect.throws(() => new C.bc01(1, 2), (e) => e is TypeError); //# 01: continued
  } else {                                                        //# 01: continued
    Expect.equals(1, new C.bc01(1, 2).x);
  }                                                               //# 01: continued
}
