| // 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 A [set] literal [<E>{elem_1 ... elem_n}] is evaluated as follows: |
| /// 2. For each element in the [set] literal: |
| /// i. Evaluate the element's expression to a value value. |
| /// ii. If element is a spread element: |
| /// a. If element is null-aware and value is [null], continue to the |
| /// next element in the literal. |
| /// b. Evaluate [value.iterator] to a [value] iterator. |
| /// c. Loop: |
| /// a. If [iterator.moveNext()] returns [false], exit the loop. |
| /// b. Evaluate set.add(iterator.current). |
| /// iii. Else: |
| /// a. Evaluate [set.add(value)]. |
| /// @description Checks that if element is null-aware and it's [null], nothing |
| /// added to the result set. |
| /// @author iarkh@unipro.ru |
| |
| |
| import "../../Utils/expect.dart"; |
| |
| List list1 = [100, 200, 300, 400, 500]; |
| List list2 = []; |
| List? list3 = null; |
| List list4 = [1 ,2, 3, "checkme"]; |
| |
| main() { |
| Expect.setEquals({}, {...?list3}); |
| Expect.setEquals({1, 2, 4}, {1, 2, ...?list3, 4}); |
| Expect.setEquals({10, 1, 2, 3, "checkme", 100, 200, 300, 400, 500}, |
| {10, ...?list4, ...?list3, ...list1}); |
| // ^^^^ |
| // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR |
| // ^ |
| // [cfe] Operand of null-aware operation '...?' has type 'List<dynamic>' which excludes null. |
| Expect.setEquals({}, {...?list3, ...?list3, ...?list3}); |
| Expect.setEquals({}, {...list2, ...?list3}); |
| } |