Added a seed option to the obi test command for reproducible tests

This commit is contained in:
Celine Mercier
2016-09-29 17:34:48 +02:00
parent 8c402101e4
commit d88811ed7d

View File

@ -2,13 +2,9 @@ from obitools3.apps.progress cimport ProgressBar # TODO I absolutely don't unde
from obitools3.obidms._obidms import OBIDMS # TODO cimport doesn't work from obitools3.obidms._obidms import OBIDMS # TODO cimport doesn't work
from obitools3.utils cimport str2bytes from obitools3.utils cimport str2bytes
import os
import sys
import shutil import shutil
import unittest
import random
import string import string
import psutil import random
VIEW_TYPES = [None, "NUC_SEQS_VIEW"] VIEW_TYPES = [None, "NUC_SEQS_VIEW"]
@ -65,7 +61,7 @@ def random_str_with_max_len(max_len):
def random_column(infos): def random_column(infos):
return random.choice(list(infos['view'].columns)) return random.choice(sorted(list(infos['view'].columns)))
def random_unique_name(infos): def random_unique_name(infos):
@ -117,7 +113,7 @@ def test_add_col(config, infos):
#existing_col = random_bool(config) # TODO doesn't work because of line count problem. See obiview.c line 1737 #existing_col = random_bool(config) # TODO doesn't work because of line count problem. See obiview.c line 1737
#if existing_col and infos["view_names"] != [] : #if existing_col and infos["view_names"] != [] :
# random_view = infos['dms'].open_view(random.choice(infos["view_names"])) # random_view = infos['dms'].open_view(random.choice(infos["view_names"]))
# random_column = random_view[random.choice(list(random_view.columns)] # random_column = random_view[random.choice(sorted(list(random_view.columns))]
# random_column_refs = random_column.refs # random_column_refs = random_column.refs
# if random_column_refs['name'] in infos['view'] : # if random_column_refs['name'] in infos['view'] :
# alias = random_unique_name(infos) # alias = random_unique_name(infos)
@ -230,7 +226,7 @@ def random_new_view(config, infos, first=False):
line_selection = [] line_selection = []
for i in range(random.randint(1, v_to_clone.line_count)) : for i in range(random.randint(1, v_to_clone.line_count)) :
line_selection.append(random.randint(0, v_to_clone.line_count-1)) line_selection.append(random.randint(0, v_to_clone.line_count-1))
print_test(config, "New line selection: "+str(line_selection)) #print_test(config, "New line selection: "+str(line_selection))
else : else :
v_type = random_view_type() v_type = random_view_type()
infos['view'] = infos['dms'].new_view(random_unique_name(infos), infos['view'] = infos['dms'].new_view(random_unique_name(infos),
@ -288,7 +284,7 @@ def addOptions(parser):
metavar='<SEQ_MAX_LEN>', metavar='<SEQ_MAX_LEN>',
default=200, default=200,
type=int, type=int,
help="Maximum length of DNA sequences." help="Maximum length of DNA sequences. "
"Default: 200") "Default: 200")
group.add_argument('--str_max_len','-t', group.add_argument('--str_max_len','-t',
@ -296,7 +292,7 @@ def addOptions(parser):
metavar='<STR_MAX_LEN>', metavar='<STR_MAX_LEN>',
default=200, default=200,
type=int, type=int,
help="Maximum length of character strings." help="Maximum length of character strings. "
"Default: 200") "Default: 200")
group.add_argument('--comments_max_len','-c', group.add_argument('--comments_max_len','-c',
@ -304,7 +300,7 @@ def addOptions(parser):
metavar='<COMMENTS_MAX_LEN>', metavar='<COMMENTS_MAX_LEN>',
default=10000, default=10000,
type=int, type=int,
help="Maximum length of view comments." help="Maximum length of view comments. "
"Default: 10000") "Default: 10000")
group.add_argument('--max_ini_col_count','-o', group.add_argument('--max_ini_col_count','-o',
@ -312,7 +308,7 @@ def addOptions(parser):
metavar='<MAX_INI_COL_COUNT>', metavar='<MAX_INI_COL_COUNT>',
default=10, default=10,
type=int, type=int,
help="Maximum number of columns in the initial view." help="Maximum number of columns in the initial view. "
"Default: 10") "Default: 10")
group.add_argument('--max_line_nb','-l', group.add_argument('--max_line_nb','-l',
@ -320,7 +316,7 @@ def addOptions(parser):
metavar='<MAX_LINE_NB>', metavar='<MAX_LINE_NB>',
default=10000, default=10000,
type=int, type=int,
help="Maximum number of lines in a column." help="Maximum number of lines in a column. "
"Default: 10000") "Default: 10000")
group.add_argument('--max_elts_per_line','-e', group.add_argument('--max_elts_per_line','-e',
@ -328,17 +324,27 @@ def addOptions(parser):
metavar='<MAX_ELTS_PER_LINE>', metavar='<MAX_ELTS_PER_LINE>',
default=20, default=20,
type=int, type=int,
help="Maximum number of elements per line in a column." help="Maximum number of elements per line in a column. "
"Default: 20") "Default: 20")
group.add_argument('--verbose','-v', group.add_argument('--verbose','-v',
action="store_true", dest="test:verbose", action="store_true", dest="test:verbose",
default=False, default=False,
help="Print the tests." help="Print the tests. "
"Default: Don't print the tests") "Default: Don't print the tests")
group.add_argument('--seed','-g',
action="store", dest="test:seed",
metavar='<SEED>',
default=None,
help="Seed (use for reproducible tests). "
"Default: Seed is determined by Python")
def run(config): def run(config):
if 'seed' in config['test'] :
random.seed(config['test']['seed'])
infos = {'dms': None, infos = {'dms': None,
'view': None, 'view': None,
'view_names': None, 'view_names': None,
@ -352,6 +358,7 @@ def run(config):
print("Initializing the DMS and the first view...") print("Initializing the DMS and the first view...")
ini_dms_and_first_view(config, infos) ini_dms_and_first_view(config, infos)
print_test(config, repr(infos['view']))
i = 0 i = 0
for t in range(config['test']['nbtests']): for t in range(config['test']['nbtests']):