def test_include_taxons(): dbf = ProgramFilter(db) taxons = ["O/J", "X/S/M/L", "non_existing_taxon"] dbf.include_taxons(taxons) print(sorted(dbf.selected_programs)) assert dbf.selected_programs.keys() == { "prg1.py", "prg3.py", "prg4.py", "prg6.py", "prg7.py", "prg8.py", "prg9.py", }
def test_include_taxons(): # The taxon "variable/assignment/single" is directly featured by assignment.py and # collatz_print.py, but only indirectly by the other programs, which therefore cannot be # included in the result. Note that this behavior contrasts with that of exclude_taxons. dbf = ProgramFilter(db) dbf.include_taxons({"variable/assignment/single"}) print(set(dbf.selected_programs.keys())) assert set( dbf.selected_programs.keys()) == {"assignment.py", "collatz_print.py"} # "operator/arithmetic/addition" is directly featured by collatz_print.py only. Therefore, # including this taxon keeps only collatz_print.py. dbf = ProgramFilter(db) dbf.include_taxons({"operator/arithmetic/addition"}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"collatz_print.py"} # "flow/conditional" is featured by collatz_print.py, fizzbuzz.py, and indirectly by # is_even.py. Therefore, including this taxon keeps only the former two. dbf = ProgramFilter(db) dbf.include_taxons({"flow/conditional"}) print(set(dbf.selected_programs.keys())) assert set( dbf.selected_programs.keys()) == {"collatz_print.py", "fizzbuzz.py"} # "type/sequence/string/literal" is directly featured by fizzbuzz.py only. Therefore, including # this taxon keeps only fizzbuzz.py dbf = ProgramFilter(db) dbf.include_taxons({"type/sequence/string/literal"}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"fizzbuzz.py"}
def test_include_taxons(): # The taxon "variable/assignment/single" is featured by assignment.py and collatz_print.py. In # collatz_print.py, it appears after a taxon "io/standard/print". Consequently, it should be included # in the results, but not the programs which import it: fizzbuzz.py and is_even.py. dbf = ProgramFilter(db) dbf.include_taxons({("after", "variable/assignment/single", "io/standard/print")}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"collatz_print.py"} # "operator/arithmetic/modulo" and "type/number/integer/literal" are both featured on # the same line in all programs except assignment.py dbf = ProgramFilter(db) dbf.include_taxons({("equals", "operator/arithmetic/modulo", "type/number/integer/literal")}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"collatz_print.py", "is_even.py", "fizzbuzz.py"} # The same with "x == y" instead of "equals" dbf = ProgramFilter(db) dbf.include_taxons({("equals", "operator/arithmetic/modulo", "type/number/integer/literal")}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"collatz_print.py", "is_even.py", "fizzbuzz.py"} # "test/equality" is inside "subroutine/function" in is_even.py, which is not imported anywhere. dbf = ProgramFilter(db) dbf.include_taxons({("inside", "test/equality", "subroutine/function")}) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"is_even.py"} # "test/equality" is inside "subroutine/function" in is_even.py and inside # "subroutine/procedure" in collatz_print.py. Both will be included. dbf = ProgramFilter(db) taxons = dbf.preprocess_taxons([("inside", "test/equality", "subroutine/.*")]) print(taxons) assert taxons == [ ("inside", "test/equality", "subroutine/argument/arg"), ("inside", "test/equality", "subroutine/function"), ("inside", "test/equality", "subroutine/predicate"), ("inside", "test/equality", "subroutine/procedure"), ] dbf.include_taxons(taxons) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == {"collatz_print.py", "is_even.py"} # "call/function/builtin/range" is not inside "flow/conditional" anywhere. dbf = ProgramFilter(db) dbf.include_taxons([("inside", "call/function/builtin/range", "flow/conditional")]) print(set(dbf.selected_programs.keys())) assert set(dbf.selected_programs.keys()) == set()