blob: 08b34792943565862352274a11469ebbda3461ba [file] [log] [blame]
// Copyright (c) 2016, 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 Evaluation of a compound assignment of the form v ??= e is
/// equivalent to the evaluation of the expression
/// ((x) => x == null ? v = e : x)(v) where x is a fresh variable that is not
/// used in e
/// @description Checks that an expression of the form v ??= e is equivalent to
/// ((x) => x == null ? v = e : x)(v) where x is a fresh variable that is not
/// used in e
/// @author sgrekhov@unipro.ru
import '../../../../Utils/expect.dart';
class C {
int? _v;
int getterInvocation = 0;
int setterInvocation = 0;
C(val) {
_v = val;
}
get v {
++getterInvocation;
return _v;
}
set v(val) {
++setterInvocation;
_v = val;
}
test(value, expected, setterInvCount) {
var res = (v ??= value);
Expect.equals(1, getterInvocation);
Expect.equals(setterInvCount, setterInvocation);
Expect.equals(expected, v);
Expect.equals(expected, res);
}
}
main() {
new C(null).test(1, 1, 1);
new C(1).test(2, 1, 0);
}