Commit 36b2fdcb authored by Sergio Costas's avatar Sergio Costas

Better management of aliases

parent a47d9331
This diff is collapsed.
......@@ -17,6 +17,13 @@ class Test(unittest.TestCase):
return var_group[var_name]
return None
def _find_variable_by_id(self, var_container, var_id):
for var_group in var_container["variables"]:
for var_name in var_group:
if var_group[var_name]["uid"] == var_id:
return var_group[var_name]
return None
def _check_var_status(self, lib, variable, status, deep = 0):
var = self._find_variable(lib.debug[deep], variable)
self.assertIsNot(var, None)
......@@ -30,6 +37,14 @@ class Test(unittest.TestCase):
else:
self.assertIsNone(var["aliases"])
def _check_is_alias_of(self, lib, variable, parent, deep = 0):
var = self._find_variable(lib.debug[deep], variable)
parent = self._find_variable(lib.debug[deep], parent)
self.assertIsNot(var, None)
self.assertIsNotNone(var["aliases"])
self.assertEqual(var["aliases"],parent["uid"])
self.assertTrue(0 != parent["aliases"].count(var["uid"]))
def _test_msg(self, lib, error_element, params):
with open("error_list.txt", "a") as errorlist:
errorlist.write(error_element[1])
......@@ -490,6 +505,101 @@ class Test(unittest.TestCase):
def test127ForProcessesBlocks(self):
self._all_fine_test("unitest/test127.c")
def test128AssignAliasFromAlias(self):
lib = self._all_fine_test("unitest/test128.c")
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 0)
self._check_var_status(lib, "alias1", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_is_alias(lib, "alias1", False, 0)
self._check_is_alias(lib, "alias2", False, 0)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 1)
self._check_is_alias(lib, "alias1", True, 1)
self._check_is_alias(lib, "alias2", False, 1)
self._check_is_alias_of(lib, "alias1", "param", 1)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_is_alias(lib, "alias1", True, 2)
self._check_is_alias(lib, "alias2", True, 2)
self._check_is_alias_of(lib, "alias1", "param", 2)
self._check_is_alias_of(lib, "alias2", "param", 2)
def test129AssignAliasFromAlias2(self):
lib = self._all_fine_test("unitest/test129.c")
self._check_var_status(lib, "param1", crust.crust.STATUS_NOT_NULL_OR_NULL, 0)
self._check_var_status(lib, "param2", crust.crust.STATUS_NOT_NULL_OR_NULL, 0)
self._check_var_status(lib, "alias1", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_is_alias(lib, "alias1", False, 0)
self._check_is_alias(lib, "alias2", False, 0)
self._check_var_status(lib, "param1", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "param2", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 1)
self._check_is_alias(lib, "alias1", True, 1)
self._check_is_alias(lib, "alias2", False, 1)
self._check_is_alias_of(lib, "alias1", "param1", 1)
self._check_var_status(lib, "param1", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "param2", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_is_alias(lib, "alias1", True, 2)
self._check_is_alias(lib, "alias2", True, 2)
self._check_is_alias_of(lib, "alias1", "param1", 2)
self._check_is_alias_of(lib, "alias2", "param1", 2)
self._check_var_status(lib, "param1", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_var_status(lib, "param2", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_is_alias(lib, "alias1", True, 3)
self._check_is_alias(lib, "alias2", True, 3)
self._check_is_alias_of(lib, "alias1", "param2", 3)
self._check_is_alias_of(lib, "alias2", "param1", 3)
def test130AssignAliasFromAlias(self):
lib = self._all_fine_test("unitest/test130.c")
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 0)
self._check_var_status(lib, "alias1", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 0)
self._check_is_alias(lib, "alias1", False, 0)
self._check_is_alias(lib, "alias2", False, 0)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 1)
self._check_var_status(lib, "alias2", crust.crust.STATUS_UNINITIALIZED, 1)
self._check_is_alias(lib, "alias1", True, 1)
self._check_is_alias(lib, "alias2", False, 1)
self._check_is_alias_of(lib, "alias1", "param", 1)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 2)
self._check_is_alias(lib, "alias1", True, 2)
self._check_is_alias(lib, "alias2", True, 2)
self._check_is_alias_of(lib, "alias1", "param", 2)
self._check_is_alias_of(lib, "alias2", "param", 2)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_var_status(lib, "alias1", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 3)
self._check_is_alias(lib, "alias1", False, 3)
self._check_is_alias(lib, "alias2", True, 3)
self._check_is_alias_of(lib, "alias2", "param", 3)
self._check_var_status(lib, "param", crust.crust.STATUS_NOT_NULL_OR_NULL, 4)
self._check_var_status(lib, "alias1", crust.crust.STATUS_FREED, 4)
self._check_var_status(lib, "alias2", crust.crust.STATUS_NOT_NULL_OR_NULL, 4)
self._check_is_alias(lib, "alias1", False, 4)
self._check_is_alias(lib, "alias2", True, 4)
self._check_is_alias_of(lib, "alias2", "param", 4)
if __name__ == '__main__':
try:
os.remove("error_list.txt")
......
typedef __crust_t__ unsigned char *crust_t;
#define NULL ((void *)0)
void main(crust_t param) {
crust_t __crust_alias__ alias1;
crust_t __crust_alias__ alias2;
__crust_debug__
alias1 = param;
__crust_debug__
alias2 = alias1;
__crust_debug__
__crust_disable__
}
typedef __crust_t__ unsigned char *crust_t;
#define NULL ((void *)0)
void main(crust_t param1, crust_t param2) {
crust_t __crust_alias__ alias1;
crust_t __crust_alias__ alias2;
__crust_debug__
alias1 = param1;
__crust_debug__
alias2 = alias1;
__crust_debug__
alias1 = param2;
__crust_debug__
__crust_disable__
}
__crust_t__ struct t_crust_t {
int value;
__crust_t__ struct t_crust_t *next;
}
typedef struct t_crust_t *crust_t;
#define NULL ((void *)0)
void main(crust_t param) {
crust_t __crust_alias__ alias1;
crust_t __crust_alias__ alias2;
__crust_debug__
alias1 = param;
__crust_debug__
alias2 = alias1;
__crust_debug__
alias1 = param->next;
__crust_debug__
alias2->next = alias1;
__crust_debug__
__crust_disable__
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment