blob: 8cef12541acd5f7e18126b1dbc63b33d06991dfd [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);
}