@@ -9,13 +9,13 @@ use crate::test_util::{
9
9
assert_checkers_match, assert_equal, assert_outputs_match, location_insensitive_checker_for,
10
10
naive_checker_for, opt_checker_for,
11
11
} ;
12
- use polonius_engine:: Algorithm ;
12
+ use polonius_engine:: { Algorithm , Engine } ;
13
13
use rustc_hash:: FxHashMap ;
14
14
use std:: error:: Error ;
15
15
use std:: path:: Path ;
16
16
17
17
fn test_facts ( all_facts : & AllFacts , algorithms : & [ Algorithm ] ) {
18
- let naive = Output :: compute ( all_facts, Algorithm :: Naive , true ) ;
18
+ let naive = Output :: compute ( all_facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
19
19
20
20
// Check that the "naive errors" are a subset of the "insensitive
21
21
// ones".
@@ -111,7 +111,7 @@ macro_rules! tests {
111
111
112
112
#[ test]
113
113
fn datafrog_opt( ) -> Result <( ) , Box <dyn Error >> {
114
- test_fn( $dir, $fn, Algorithm :: DatafrogOpt )
114
+ test_fn( $dir, $fn, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) )
115
115
}
116
116
}
117
117
) *
@@ -168,7 +168,7 @@ fn test_sensitive_passes_issue_47680() -> Result<(), Box<dyn Error>> {
168
168
. join ( "main" ) ;
169
169
let tables = & mut intern:: InternerTables :: new ( ) ;
170
170
let all_facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) ?;
171
- let sensitive = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt , false ) ;
171
+ let sensitive = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , false ) ;
172
172
173
173
assert ! ( sensitive. errors. is_empty( ) ) ;
174
174
@@ -201,15 +201,15 @@ fn no_subset_symmetries_exist() -> Result<(), Box<dyn Error>> {
201
201
false
202
202
} ;
203
203
204
- let naive = Output :: compute ( & all_facts, Algorithm :: Naive , true ) ;
204
+ let naive = Output :: compute ( & all_facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
205
205
assert ! ( !subset_symmetries_exist( & naive) ) ;
206
206
207
207
// FIXME: the issue-47680 dataset is suboptimal here as DatafrogOpt does not
208
208
// produce subset symmetries for it. It does for clap, and it was used to manually verify
209
209
// that the assert in verbose mode didn't trigger. Therefore, switch to this dataset
210
210
// whenever it's fast enough to be enabled in tests, or somehow create a test facts program
211
211
// or reduce it from clap.
212
- let opt = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt , true ) ;
212
+ let opt = Output :: compute ( & all_facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
213
213
assert ! ( !subset_symmetries_exist( & opt) ) ;
214
214
Ok ( ( ) )
215
215
}
@@ -323,8 +323,8 @@ fn smoke_test_errors() {
323
323
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
324
324
325
325
let location_insensitive = Output :: compute ( & facts, Algorithm :: LocationInsensitive , true ) ;
326
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
327
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
326
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
327
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
328
328
329
329
// We have to find errors with every analysis
330
330
assert ! (
@@ -399,7 +399,7 @@ fn var_live_in_single_block() {
399
399
let mut tables = intern:: InternerTables :: new ( ) ;
400
400
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
401
401
402
- let liveness = Output :: compute ( & facts, Algorithm :: Naive , true ) . var_live_on_entry ;
402
+ let liveness = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) . var_live_on_entry ;
403
403
println ! ( "Registered liveness data: {:?}" , liveness) ;
404
404
for ( point, variables) in liveness. iter ( ) {
405
405
println ! ( "{:?} has live variables: {:?}" , point, variables) ;
@@ -433,7 +433,7 @@ fn var_live_in_successor_propagates_to_predecessor() {
433
433
let mut tables = intern:: InternerTables :: new ( ) ;
434
434
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
435
435
436
- let liveness = Output :: compute ( & facts, Algorithm :: Naive , true ) . var_live_on_entry ;
436
+ let liveness = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) . var_live_on_entry ;
437
437
println ! ( "Registered liveness data: {:?}" , liveness) ;
438
438
println ! ( "CFG: {:?}" , facts. cfg_edge) ;
439
439
for ( point, variables) in liveness. iter ( ) {
@@ -470,7 +470,7 @@ fn var_live_in_successor_killed_by_reassignment() {
470
470
let mut tables = intern:: InternerTables :: new ( ) ;
471
471
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
472
472
473
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
473
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
474
474
println ! ( "result: {:#?}" , result) ;
475
475
let liveness = result. var_live_on_entry ;
476
476
println ! ( "CFG: {:#?}" , facts. cfg_edge) ;
@@ -531,7 +531,7 @@ fn var_drop_used_simple() {
531
531
let mut tables = intern:: InternerTables :: new ( ) ;
532
532
let facts = parse_from_program ( program, & mut tables) . expect ( "Parsing failure" ) ;
533
533
534
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
534
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
535
535
println ! ( "result: {:#?}" , result) ;
536
536
let liveness = result. var_drop_live_on_entry ;
537
537
println ! ( "CFG: {:#?}" , facts. cfg_edge) ;
@@ -573,7 +573,7 @@ fn var_drop_used_simple() {
573
573
fn illegal_subset_error ( ) {
574
574
let program = r"
575
575
placeholders { 'a, 'b }
576
-
576
+
577
577
block B0 {
578
578
// creates a transitive `'b: 'a` subset
579
579
loan_issued_at('x, L0),
@@ -638,7 +638,7 @@ fn transitive_known_subset() {
638
638
let program = r"
639
639
placeholders { 'a, 'b, 'c }
640
640
known_subsets { 'a: 'b, 'b: 'c }
641
-
641
+
642
642
block B0 {
643
643
loan_issued_at('x, L0),
644
644
outlives('a: 'x),
@@ -670,7 +670,7 @@ fn transitive_illegal_subset_error() {
670
670
let program = r"
671
671
placeholders { 'a, 'b, 'c }
672
672
known_subsets { 'a: 'b }
673
-
673
+
674
674
block B0 {
675
675
// this transitive `'a: 'b` subset is already known
676
676
loan_issued_at('x, L0),
@@ -679,7 +679,7 @@ fn transitive_illegal_subset_error() {
679
679
680
680
// creates unknown transitive subsets:
681
681
// - `'b: 'c`
682
- // - and therefore `'a: 'c`
682
+ // - and therefore `'a: 'c`
683
683
loan_issued_at('y, L1),
684
684
outlives('b: 'y),
685
685
outlives('y: 'c);
@@ -721,15 +721,15 @@ fn successes_in_subset_relations_dataset() {
721
721
let tables = & mut intern:: InternerTables :: new ( ) ;
722
722
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
723
723
724
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
724
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
725
725
assert ! ( naive. errors. is_empty( ) ) ;
726
726
assert ! ( naive. subset_errors. is_empty( ) ) ;
727
727
728
728
let insensitive = Output :: compute ( & facts, Algorithm :: LocationInsensitive , true ) ;
729
729
assert ! ( insensitive. errors. is_empty( ) ) ;
730
730
assert ! ( insensitive. subset_errors. is_empty( ) ) ;
731
731
732
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
732
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
733
733
assert ! ( opt. errors. is_empty( ) ) ;
734
734
assert ! ( opt. subset_errors. is_empty( ) ) ;
735
735
}
@@ -746,7 +746,7 @@ fn errors_in_subset_relations_dataset() {
746
746
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
747
747
748
748
// this function has no illegal access errors, but one subset error, over 3 points
749
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
749
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
750
750
assert ! ( naive. errors. is_empty( ) ) ;
751
751
assert_eq ! ( naive. subset_errors. len( ) , 3 ) ;
752
752
@@ -782,7 +782,7 @@ fn errors_in_subset_relations_dataset() {
782
782
assert ! ( insensitive_subset_errors. contains( & expected_subset_error) ) ;
783
783
784
784
// And the optimized analysis results should be the same as the naive one's.
785
- let opt = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
785
+ let opt = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
786
786
assert_outputs_match ( & naive, & opt) ;
787
787
}
788
788
@@ -802,7 +802,7 @@ fn successes_in_move_errors_dataset() {
802
802
let tables = & mut intern:: InternerTables :: new ( ) ;
803
803
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
804
804
805
- let naive = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
805
+ let naive = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
806
806
assert ! ( naive. errors. is_empty( ) ) ;
807
807
assert ! ( naive. subset_errors. is_empty( ) ) ;
808
808
assert ! ( naive. move_errors. is_empty( ) ) ;
@@ -812,7 +812,7 @@ fn successes_in_move_errors_dataset() {
812
812
assert ! ( insensitive. subset_errors. is_empty( ) ) ;
813
813
assert ! ( insensitive. move_errors. is_empty( ) ) ;
814
814
815
- let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt , true ) ;
815
+ let opt = Output :: compute ( & facts, Algorithm :: DatafrogOpt ( Engine :: Datafrog ) , true ) ;
816
816
assert ! ( opt. errors. is_empty( ) ) ;
817
817
assert ! ( opt. subset_errors. is_empty( ) ) ;
818
818
assert ! ( opt. move_errors. is_empty( ) ) ;
@@ -829,7 +829,7 @@ fn basic_move_error() {
829
829
let tables = & mut intern:: InternerTables :: new ( ) ;
830
830
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
831
831
832
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
832
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
833
833
assert ! ( result. errors. is_empty( ) ) ;
834
834
assert ! ( result. subset_errors. is_empty( ) ) ;
835
835
@@ -853,7 +853,7 @@ fn conditional_init() {
853
853
let tables = & mut intern:: InternerTables :: new ( ) ;
854
854
let facts = tab_delim:: load_tab_delimited_facts ( tables, & facts_dir) . expect ( "facts" ) ;
855
855
856
- let result = Output :: compute ( & facts, Algorithm :: Naive , true ) ;
856
+ let result = Output :: compute ( & facts, Algorithm :: Naive ( Engine :: Datafrog ) , true ) ;
857
857
assert ! ( result. errors. is_empty( ) ) ;
858
858
assert ! ( result. subset_errors. is_empty( ) ) ;
859
859
0 commit comments