
and a counter in the OBIDMS column structure; fixed some bugs and created tests for referring columns that are bound to disappear anyway.
312 lines
12 KiB
Python
312 lines
12 KiB
Python
import os
|
|
import sys
|
|
import shutil
|
|
import unittest
|
|
from random import randint, uniform, choice
|
|
import string
|
|
|
|
from obitools3.obidms._obidms import OBIDMS
|
|
|
|
|
|
LINE_COUNT_FOR_TEST_COLUMN = 10000 # TODO randomize?
|
|
SMALLER_LINE_COUNT_FOR_TEST_COLUMN = 1000 # TODO randomize?
|
|
NB_ELEMENTS_PER_LINE = 10 # TODO randomize?
|
|
DMS_NAME = "unit_test_dms"
|
|
|
|
|
|
def create_test_obidms():
|
|
dms_name = DMS_NAME
|
|
dms_dir_name = dms_name+'.obidms'
|
|
dms = OBIDMS(dms_name)
|
|
return (dms, dms_name, dms_dir_name)
|
|
|
|
|
|
def create_test_column(dms, data_type, multiple_elements_per_line=False):
|
|
|
|
col_name = "unit_test_"+data_type
|
|
|
|
if multiple_elements_per_line :
|
|
elts_names = elements_names()
|
|
col = dms.open_column(col_name,
|
|
create=True,
|
|
type=data_type,
|
|
nb_elements_per_line=NB_ELEMENTS_PER_LINE,
|
|
elements_names=elts_names)
|
|
return (col, col_name, elts_names)
|
|
|
|
else :
|
|
col = dms.open_column(col_name,
|
|
create=True,
|
|
type=data_type)
|
|
return (col, col_name)
|
|
|
|
|
|
def elements_names():
|
|
names = [str(i) for i in range(NB_ELEMENTS_PER_LINE)]
|
|
return names
|
|
|
|
|
|
def random_obivalue(data_type):
|
|
r = 1000000
|
|
if data_type == "OBI_INT" :
|
|
return randint(-r,r)
|
|
elif data_type == "OBI_FLOAT" :
|
|
return uniform(-r,r)
|
|
elif data_type == "OBI_BOOL" :
|
|
return randint(0,1)
|
|
elif data_type == "OBI_CHAR" :
|
|
return choice(string.ascii_lowercase)
|
|
elif data_type == "OBI_STR" :
|
|
length = randint(1,200)
|
|
randoms = ''.join(choice(string.ascii_lowercase) for i in range(length))
|
|
return randoms
|
|
elif data_type == "OBI_SEQ" :
|
|
length = randint(1,200)
|
|
randoms = ''.join(choice("atgcryswkmdbhvn") for i in range(length))
|
|
return randoms
|
|
|
|
class OBIDMS_Column_TestCase(unittest.TestCase):
|
|
def tearDown(self):
|
|
self.col.close()
|
|
self.dms.close()
|
|
shutil.rmtree(self.dms_dir_name, ignore_errors=True)
|
|
def test_OBIDMS_column_type(self):
|
|
assert self.col.get_data_type() == self.data_type, 'Wrong data type associated with column'
|
|
def test_OBIDMS_column_cloning(self):
|
|
for i in range(LINE_COUNT_FOR_TEST_COLUMN):
|
|
self.col[i]= random_obivalue(self.data_type)
|
|
self.col.close()
|
|
clone = self.dms.open_column(self.col_name, clone=True)
|
|
self.col = self.dms.open_column(self.col_name)
|
|
assert clone.get_nb_lines_used() == self.col.get_nb_lines_used(), "Cloned column doesn't have the same number of lines used"
|
|
i=0
|
|
for i in range(clone.get_nb_lines_used()) :
|
|
assert clone[i] == self.col[i], "Different value in original column and cloned column"
|
|
assert clone[i] is not None, "None value"
|
|
clone.close()
|
|
def test_OBIDMS_column_set_and_get(self):
|
|
for i in range(LINE_COUNT_FOR_TEST_COLUMN):
|
|
v = random_obivalue(self.data_type)
|
|
self.col[i] = v
|
|
assert self.col[i] == v, "Different value than the set value"
|
|
assert self.col[i] is not None, "None value"
|
|
def test_OBIDMS_referring_column(self):
|
|
for i in range(LINE_COUNT_FOR_TEST_COLUMN):
|
|
self.col[i] = random_obivalue(self.data_type)
|
|
ref_col = self.dms.open_column(self.col_name, referring=True)
|
|
j = 0
|
|
for i in range(LINE_COUNT_FOR_TEST_COLUMN):
|
|
if i%2 : # TODO randomize
|
|
ref_col.grep_line(i)
|
|
assert ref_col[j] == self.col[i], "Different value in original column and returned by referring column"
|
|
assert ref_col[j] is not None, "None value"
|
|
j+=1
|
|
|
|
|
|
class OBIDMS_Column_multiple_elements_TestCase(OBIDMS_Column_TestCase):
|
|
def test_OBIDMS_column_cloning(self):
|
|
pass
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
v = {}
|
|
for e in self.elts_names :
|
|
v[e] = random_obivalue(self.data_type)
|
|
self.col[i] = v
|
|
self.col.close()
|
|
clone = self.dms.open_column(self.col_name, clone=True)
|
|
self.col = self.dms.open_column(self.col_name)
|
|
assert clone.get_nb_lines_used() == self.col.get_nb_lines_used(), "Cloned column doesn't have the same number of lines used"
|
|
i=0
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
assert self.col[i] == clone[i], "Different value in original column and cloned column"
|
|
assert self.col[i] is not None, "None value"
|
|
clone.close()
|
|
def test_OBIDMS_column_set_and_get_with_elements_names(self):
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
for e in range(NB_ELEMENTS_PER_LINE) :
|
|
v = random_obivalue(self.data_type)
|
|
self.col.set_item(i, self.elts_names[e], v)
|
|
assert self.col.get_item(i, self.elts_names[e]) == v, "Different value than the set value"
|
|
assert self.col.get_item(i, self.elts_names[e]) is not None, "None value"
|
|
def test_OBIDMS_column_set_and_get(self):
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
v = {}
|
|
for e in self.elts_names :
|
|
v[e] = random_obivalue(self.data_type)
|
|
self.col[i] = v
|
|
assert self.col[i] == v, "Different value than the set value"
|
|
assert self.col[i] is not None, "None value"
|
|
def test_OBIDMS_referring_column(self):
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
v = {}
|
|
for e in self.elts_names :
|
|
v[e] = random_obivalue(self.data_type)
|
|
self.col[i] = v
|
|
ref_col = self.dms.open_column(self.col_name, referring=True)
|
|
j = 0
|
|
for i in range(SMALLER_LINE_COUNT_FOR_TEST_COLUMN):
|
|
if i%2 : # TODO randomize
|
|
ref_col.grep_line(i)
|
|
assert ref_col[j] == self.col[i], "Different value in original column and returned by referring column"
|
|
assert ref_col[j] is not None, "None value"
|
|
j+=1
|
|
ref_col.close()
|
|
|
|
|
|
class OBIDMS_Column_OBI_INT_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_INT'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_INT_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_INT'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
|
|
class OBIDMS_Column_OBI_FLOAT_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_FLOAT'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_FLOAT_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_FLOAT'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
|
|
class OBIDMS_Column_OBI_BOOL_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_BOOL'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_BOOL_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_BOOL'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
|
|
class OBIDMS_Column_OBI_CHAR_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_CHAR'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_CHAR_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_CHAR'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
|
|
class OBIDMS_Column_OBI_STR_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_STR'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_STR_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_STR'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
class OBIDMS_Column_OBI_SEQ_TestCase(OBIDMS_Column_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_SEQ'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name = create_test_column(self.dms,
|
|
self.data_type)
|
|
|
|
|
|
class OBIDMS_Column_OBI_SEQ_multiple_elements_TestCase(OBIDMS_Column_multiple_elements_TestCase):
|
|
def setUp(self):
|
|
self.data_type = 'OBI_SEQ'
|
|
self.dms, \
|
|
self.dms_name, \
|
|
self.dms_dir_name = create_test_obidms()
|
|
self.col, \
|
|
self.col_name, \
|
|
self.elts_names = create_test_column(self.dms,
|
|
self.data_type,
|
|
multiple_elements_per_line=True)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(verbosity=2, defaultTest=["OBIDMS_Column_OBI_INT_TestCase",
|
|
"OBIDMS_Column_OBI_INT_multiple_elements_TestCase",
|
|
"OBIDMS_Column_OBI_FLOAT_TestCase",
|
|
"OBIDMS_Column_OBI_FLOAT_multiple_elements_TestCase",
|
|
"OBIDMS_Column_OBI_BOOL_TestCase",
|
|
"OBIDMS_Column_OBI_BOOL_multiple_elements_TestCase",
|
|
"OBIDMS_Column_OBI_CHAR_TestCase",
|
|
"OBIDMS_Column_OBI_CHAR_multiple_elements_TestCase",
|
|
"OBIDMS_Column_OBI_STR_TestCase",
|
|
"OBIDMS_Column_OBI_STR_multiple_elements_TestCase",
|
|
"OBIDMS_Column_OBI_SEQ_TestCase",
|
|
"OBIDMS_Column_OBI_SEQ_multiple_elements_TestCase"])
|
|
|
|
|