Skip to content
Snippets Groups Projects
Commit 6d9d6899 authored by Amandine  PERRIN's avatar Amandine PERRIN
Browse files

add func tests for tree module

parent db7c991f
No related branches found
No related tags found
No related merge requests found
Pipeline #40108 passed
......@@ -113,7 +113,7 @@ func-test-ubuntu:
- py.test test/test_functional/test_corepers* -vx
- py.test test/test_functional/test_align-parser.py -vx
- py.test test/test_functional/test_align.py -vx
# - py.test test/test_functional/test_tree* -vx
- py.test test/test_functional/test_tree* -vx
- py.test test/test_functional/test_annote-parser.py -vx
- py.test test/test_functional/test_annote.py -xv
- py.test test/test_functional/test_prepare* -vx
......
......@@ -167,26 +167,7 @@ def build_parser(parser):
parser to configure in order to extract command-line arguments
"""
import argparse
import multiprocessing
def thread_num(param):
try:
param = int(param)
except Exception:
msg = "argument --threads threads: invalid int value: {}".format(param)
raise argparse.ArgumentTypeError(msg)
nb_cpu = multiprocessing.cpu_count()
if param > nb_cpu:
msg = ("You have {} threads on your computer, you cannot ask for more: "
"invalid value: {}").format(nb_cpu, param)
raise argparse.ArgumentTypeError(msg)
elif param < 0:
msg = ("Please provide a positive number of threads (or 0 for all threads): "
"Invalid value: {}").format(param)
raise argparse.ArgumentTypeError(msg)
elif param == 0:
return nb_cpu
return param
from PanACoTA import utils_argparse
# Create command-line parser for all options and arguments to give
......@@ -210,7 +191,7 @@ def build_parser(parser):
"default, no bootstrap is calculated. For IQtree, it "
"will use ultrafast bootstrap (>=1000)."))
optional.add_argument("--threads", dest="threads", default=1, type=thread_num,
optional.add_argument("--threads", dest="threads", default=1, type=utils_argparse.thread_num,
help=("add this option if you want to parallelize on several threads. "
"Indicate on how many threads you want to parallelize. "
"By default, it uses 1 thread. Put 0 if you want to use "
......
......@@ -93,7 +93,7 @@ def test_parser_quicktree_parallel(capsys):
parser = argparse.ArgumentParser(description="Tree", add_help=False)
tree.build_parser(parser)
with pytest.raises(SystemExit):
tree.parse(parser, "-a align -s quicktree --threads 5 -o outdir".split())
tree.parse(parser, "-a align -s quicktree --threads 2 -o outdir".split())
_, err = capsys.readouterr()
assert ("You cannot run quicktree with multiple threads. Choose another software, or remove "
"the --threads option.") in err
......@@ -317,14 +317,16 @@ def test_parser_threads_ok():
"""
parser = argparse.ArgumentParser(description="Tree", add_help=False)
tree.build_parser(parser)
args = tree.parse(parser, "-a align -o outdir --threads 5".split())
import multiprocessing
nb = multiprocessing.cpu_count()
args = tree.parse(parser, f"-a align -o outdir --threads {nb}".split())
assert args.alignment == "align"
assert args.boot is None
assert args.outdir == "outdir"
assert args.soft == "iqtree"
assert args.model == "GTR"
assert args.write_boot is False
assert args.threads == 5
assert args.threads == nb
assert args.verbose == 0
assert args.quiet == False
......
......@@ -33,7 +33,8 @@ def setup_teardown_module():
- remove all log files
- remove directory with generated results
"""
os.mkdir(GENEPATH)
if not os.path.isdir(GENEPATH):
os.mkdir(GENEPATH)
print("setup")
yield
......@@ -50,9 +51,10 @@ def test_main_default(capsys):
soft = "iqtree"
model = "GTR"
threads = 1
verbose = 3
cmd = "cmd test_main_default"
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads)
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, verbose=verbose)
# Check output files
iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log")
assert os.path.isfile(iq_log_file)
......@@ -73,6 +75,7 @@ def test_main_default(capsys):
assert os.path.isfile(logs_base + ".err")
# Check logs
out, err = capsys.readouterr()
print(out)
assert "Running IQtree..." in out
assert ("IQtree command: iqtree -s test/data/align/exp_files/exp_pers4genomes.grp.aln "
"-nt 1 -m GTR -st DNA -pre test/data/tree/generated_by_func_tests/"
......@@ -182,7 +185,7 @@ def test_main_fasttree(capsys):
threads = 1
boot = 100
cmd = "cmd: test_main_fasttree"
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot)
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=boot, verbose=2)
# Check output files
# fastme logfile
log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.fasttree.log")
......@@ -201,11 +204,12 @@ def test_main_fasttree(capsys):
# log files
logs_base = os.path.join(outdir, "PanACoTA-tree-fasttree.log")
assert os.path.isfile(logs_base)
assert not os.path.isfile(logs_base + ".details")
assert os.path.isfile(logs_base + ".details")
assert not os.path.isfile(logs_base + ".debug")
assert os.path.isfile(logs_base + ".err")
# Check logs
out, err = capsys.readouterr()
print(out)
assert "Running FasttreeMP..." in out
assert ("Fasttree command: FastTreeMP -nt -gtr -noml -nocat -boot 100 "
"-log test/data/tree/generated_by_func_tests/exp_pers4genomes.grp.aln.fasttree.log "
......@@ -224,7 +228,8 @@ def test_main_iqtree2_newdir(capsys):
threads = 1
cmd = "cmd test_main_default"
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True)
tree.main(cmd, ALIGNMENT, outdir, soft, model, threads, boot=1000, write_boot=True,
verbose=2)
# Check output files
# Check iqtree logfile
iq_log_file = os.path.join(outdir, "exp_pers4genomes.grp.aln.iqtree_tree.log")
......@@ -254,6 +259,7 @@ def test_main_iqtree2_newdir(capsys):
logs_base = os.path.join(outdir, "PanACoTA-tree-iqtree2.log")
assert os.path.isfile(logs_base)
assert os.path.isfile(logs_base + ".err")
assert os.path.isfile(logs_base + ".details")
# Check logs
out, err = capsys.readouterr()
assert "Running IQtree..." in out
......@@ -278,7 +284,7 @@ def test_main_from_parse(capsys):
args.model = "HKY"
args.write_boot = False
args.threads = 1
args.verbose = 1
args.verbose = 2
args.quiet = False
args.memory = False
args.fast = False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment