Files
sdk/pkg/compiler/test/inference/powerset_bits_test.dart
T
Nate Biggs f5a53a231b [dart2js] Migrate test/inference for null safety migration (1/2).
Change-Id: I4a0fa9f235f24b7746af4d1edb4679c4f8fd8da2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279542
Reviewed-by: Mayank Patke <fishythefish@google.com>
2023-01-24 02:45:28 +00:00

70 lines
2.1 KiB
Dart

// Copyright (c) 2020, 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:async_helper/async_helper.dart';
import 'package:compiler/src/common.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/inferrer/powersets/powersets.dart';
import 'package:compiler/src/inferrer/powersets/powerset_bits.dart';
import 'package:compiler/src/js_model/js_world.dart' show JClosedWorld;
import 'package:expect/expect.dart';
import '../helpers/element_lookup.dart';
import 'package:compiler/src/util/memory_compiler.dart';
const String CODE = """
var a = true;
var b = true;
var c = true;
var d = true;
var e = func();
var sink;
bool func() {
return false;
}
main() {
b = func();
c = b && a;
d = a || b;
e = false;
sink = e;
print(sink);
}
""";
main() {
retainDataForTesting = true;
runTests() async {
CompilationResult result = await runCompiler(
memorySourceFiles: {'main.dart': CODE},
options: ['--experimental-powersets']);
Expect.isTrue(result.isSuccess);
Compiler compiler = result.compiler;
var results = compiler.globalInference.resultsForTesting!;
JClosedWorld closedWorld = results.closedWorld;
final powersetDomain = closedWorld.abstractValueDomain as PowersetDomain;
PowersetBitsDomain powersetBitsDomain = powersetDomain.powersetBitsDomain;
checkBits(String name, bits) {
var element = findMember(closedWorld, name);
final mask = results.resultOfMember(element).type as PowersetValue;
Expect.equals(bits, mask.powersetBits);
}
checkBits('a', powersetBitsDomain.trueValue);
checkBits('b', powersetBitsDomain.boolValue);
checkBits('c', powersetBitsDomain.boolValue);
checkBits('d', powersetBitsDomain.boolValue);
checkBits(
'e', powersetBitsDomain.falseValue | powersetBitsDomain.nullValue);
}
asyncTest(() async {
print('--test from kernel------------------------------------------------');
await runTests();
});
}