/*
 * Copyright (c) 2019, 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 An expression element (the base case in lists and sets):
 *
 *  It is a compile-time error if the expression is not a constant expression.
 *  The expansion is the value of the expression.
 *
 * @description Checks that the expansion is the value of the expression
 * @author sgrekhov@unipro.ru
 */
// SharedOptions=--enable-experiment=constant-update-2018
import "../../Utils/expect.dart";

main() {
  const x = 3;

  List<int> list1 = const [if (1 > 0) 1, 1 ];
  Expect.listEquals([1, 1], list1);
  List<int> list2 = const [if (1 > 0) x, 2 ];
  Expect.listEquals([x, 2], list2);
  const List<int> list3 = [if (-1 > 0) 1, 1 ];
  Expect.listEquals([1], list3);
  const List<int> list4 = [if (1 > 0) 1, if (false) -1 ];
  Expect.listEquals([1], list4);
  var list5 = const [if (x > 0) 1, 5 + 1, ];
  Expect.listEquals([1, 6], list5);
  var list6 = const [if (1 > 0) x, 1, ];
  Expect.listEquals([x, 1], list6);
  var list7 = const <int>[if (x > 0) x, 7, ];
  Expect.listEquals([x, 7], list7);
  var list8 = const <int>[if (1 > 0) x, 8, ];
  Expect.listEquals([x, 8], list8);
  const list9 = [if (x > 0) 1 + 1, 1 ];
  Expect.listEquals([2, 1], list9);
  const list10 = [if (1 > 0) x + x, 1 + 7];
  Expect.listEquals([x + x, 8], list10);

  Set<int> set1 = const {if (x > 0) 1, -1 };
  Expect.setEquals({1, -1}, set1);
  Set<int> set2 = const {if (1 > 0) x, 1 - 1 };
  Expect.setEquals({x, 0}, set2);
  const Set<int> set3 = {if (x > 0) 1, -1 };
  Expect.setEquals({1, -1}, set3);
  const Set<int> set4 = {if (-1 > 0) x, -1 };
  Expect.setEquals({-1}, set4);
  var set5 = const {if (x > 0) 1, -1, };
  Expect.setEquals({1, -1}, set5);
  var set6 = const {if (1 > 0) x, -1, };
  Expect.setEquals({x, -1}, set6);
  var set7 = const <int>{if (x > 0) 1, -1, };
  Expect.setEquals({1, -1}, set7);
  var set8 = const <int>{if (1 > 0) x, -1, };
  Expect.setEquals({x, -1}, set8);
  const set9 = {if (x > 0) 1, -1 };
  Expect.setEquals({1, -1}, set9);
  const set10 = {if (1 > 0) x, -1 };
  Expect.setEquals({x, -1}, set10);
}
