// Copyright (c) 2011, 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 Execution of an assert statement assert(e);
/// proceeds as follows:
/// The conditional expression e is evaluated to an object o. If the class of o
/// is a subtype of Function then let r be the result of invoking o with no
/// arguments. Otherwise, let r be o. It is a dynamic type error if o is not of
/// type bool or of type Function, or if r is not of type bool. If r is false,
/// we say that the assertion failed. If r is true, we say that the assertion
/// succeeded. If the assertion succeeded, execution of the assert statement is
/// complete. If the assertion failed, an AssertionError is thrown.
/// @description Checks that the assert statement succeeds if the conditional
/// expression evaluates to either true or () => true.
/// @author rodionov

import '../../../Utils/expect.dart';

bool t() {return true;}
bool f() {return false;}

bool flag = false;
bool check() {flag = true; return flag;}

main() {
  assert (check());
  if (assertStatementsEnabled) {
    Expect.isTrue(flag);
  }

  assert (true);
  assert (true ? true : true);
  assert ((1 > 0 ? true && true : true || false));
  assert (t());
  assert ("string".contains("tri") ? t() : f());
}
