blob: d2fcf89971756611f5659fb999eb0f5b74471580 [file] [log] [blame]
// 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.
import 'package:analysis_server/src/nullability/unit_propagation.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(UnitPropagationTest);
});
}
/// TODO(paulberry): write more tests
@reflectiveTest
class UnitPropagationTest {
var solver = Solver();
ConstraintVariable newVar(String name) => _NamedConstraintVariable(name);
test_record_copies_conditions() {
var a = newVar('a');
var b = newVar('b');
var conditions = [a];
solver.record(conditions, b);
conditions.removeLast();
expect(a.value, false);
expect(b.value, false);
solver.record([], a);
expect(a.value, true);
expect(b.value, true);
}
test_record_propagates_true_variables_immediately() {
var a = newVar('a');
expect(a.value, false);
solver.record([], a);
expect(a.value, true);
var b = newVar('b');
expect(b.value, false);
solver.record([a], b);
expect(b.value, true);
}
}
/// Representation of a constraint variable with a specified name.
///
/// This makes test failures easier to comprehend.
class _NamedConstraintVariable extends ConstraintVariable {
final String _name;
_NamedConstraintVariable(this._name);
@override
String toString() => _name;
}