示例#1
0
    def test_get_circular_link_item_more(self):
        from ml.misc.linked_list import LinkedList
        a = {'data': 'AAA'}
        b = {'data': 'BBBB'}
        c = {'data': 'c3'}
        d = {'data': 'ddddddd'}
        e = {'data': 'e'}

        tests = [{
            'items': [a, b, c],
            'cyclic_to': b
        }, {
            'items': [a, b, c, d],
            'cyclic_to': a
        }, {
            'items': [a, b, c, d, e],
            'cyclic_to': c
        }, {
            'items': [a, b, c, d, e],
            'cyclic_to': e
        }]

        for test in tests:
            items = test.get('items')
            cyclic_to = test.get('cyclic_to')
            head, tail = self.build_linked_list(items)
            tail['next'] = cyclic_to
            a = LinkedList()
            a.head = head
            result = a.get_circular_link_item()
            v1 = result['data'] if result else None
            v2 = tail['data'] if tail else None
            msg = 'result.data = {}\n  tail.data = {}'.format(v1, v2)
            self.assertEqual(result, tail, msg)
示例#2
0
 def test_to_list(self):
     """
     test ml.misc.linked_list :: LinkedList :: to_list
     :return:
     """
     from ml.misc.linked_list import LinkedList
     tests = [{
         "result": [9, 88.5, -773],
         "my_list": [9, 88.5, -773],
     }, {
         "result": [-9, 3.1415926, 'string'],
         "my_list": [-9, 3.1415926, 'string'],
     }, {
         "result": [None, {
             'launch': 'bread'
         }, 'string'],
         "my_list": [None, {
             'launch': 'bread'
         }, 'string'],
     }, {
         "result": [7],
         "my_list": [7],
     }, {
         "result": None,
         "my_list": [],
     }, {
         "result": None,
         "my_list": None,
     }, {
         "result": None,
         "my_list": 5,
     }]
     for test in tests:
         my_list = test['my_list']
         expected = test['result']
         obj = LinkedList(my_list)
         result = obj.to_list()
         if isinstance(expected, list):
             self.assertListEqual(result, expected)
         else:
             self.assertIsNone(result)
示例#3
0
 def test_reverse(self):
     """
     test ml.misc.LinkedList :: LinkedList :: reverse
     :return:
     """
     from ml.misc.linked_list import LinkedList
     tests = [{
         "head": {
             'data': -773,
             'next': {
                 'data': 88.5,
                 'next': {
                     'data': 9,
                     'next': None
                 }
             }
         },
         "my_list": [9, 88.5, -773],
     }, {
         "head": {
             'data': 'string',
             'next': {
                 'data': 3.1415926,
                 'next': {
                     'data': -9,
                     'next': None
                 }
             }
         },
         "my_list": [-9, 3.1415926, 'string'],
     }, {
         "head": {
             'data': 'string',
             'next': {
                 'data': {
                     'launch': 'bread'
                 },
                 'next': {
                     'data': None,
                     'next': None
                 }
             }
         },
         "my_list": [None, {
             'launch': 'bread'
         }, 'string'],
     }, {
         "head": {
             'data': 7,
             'next': None
         },
         "my_list": [7],
     }, {
         "head": None,
         "my_list": [],
     }, {
         "head": None,
         "my_list": None,
     }, {
         "head": None,
         "my_list": 5,
     }]
     for test in tests:
         my_list = test['my_list']
         expected = test['head']
         obj = LinkedList(my_list)
         obj.reverse()
         if isinstance(expected, dict):
             self.assertDictEqual(obj.head, expected)
         else:
             self.assertIsNone(obj.head)
示例#4
0
    def test_fix(self):
        """
        test ml.misc.linked_list :: LinkedList :: fix
        @return:
        """
        from ml.misc.linked_list import LinkedList
        # circular a
        a = {'data': 'string', 'next': None}
        b = {'data': 0, 'next': None}
        c = {'data': 987, 'next': a}
        a['next'] = b
        b['next'] = c

        # circular d
        d = {'data': ['just list', 's'], 'next': None}
        e = {'data': 3.1415926, 'next': d}
        d['next'] = e

        tests = [{
            "head": {
                'data': 'string',
                'next': {
                    'data': 0,
                    'next': {
                        'data': 987,
                        'next': None
                    }
                }
            },
            "link": a,
        }, {
            "head": {
                'data': ['just list', 's'],
                'next': {
                    'data': 3.1415926,
                    'next': None
                }
            },
            "link": d,
        }, {
            "head": {
                'data': 0,
                "next": {
                    'data': None,
                    'next': {
                        'data': {
                            "data": 'fake link'
                        },
                        'next': None
                    }
                }
            },
            "link": {
                'data': 0,
                "next": {
                    'data': None,
                    'next': {
                        'data': {
                            "data": 'fake link'
                        },
                        'next': None
                    }
                }
            }
        }, {
            "head": {
                'data': 'only one ',
                'next': None
            },
            "link": {
                'data': 'only one ',
                'next': None
            },
        }, {
            "head": {
                'data': -1,
                'next': {
                    'data': [1, 1995, -15],
                    'next': None
                }
            },
            "link": {
                'data': -1,
                'next': {
                    'data': [1, 1995, -15],
                    'next': None
                }
            },
        }, {
            "head": None,
            "link": None,
        }]
        for test in tests:
            my_link = test["link"]
            expected_head = test["head"]
            obj = LinkedList([])
            obj.head = my_link
            obj.fix_circular_link()
            if expected_head is None:
                self.assertIsNone(obj.head)
            else:
                self.assertDictEqual(obj.head, expected_head)
示例#5
0
    def test_get_circular_link_item(self):
        """
        test ml.misc.linked_list :: linkedList :: get_circular_link_item
        @return:
        """
        from ml.misc.linked_list import LinkedList

        # circular a
        a = {'data': 'string', 'next': None}
        b = {'data': 0, 'next': None}
        c = {'data': 987, 'next': a}
        a['next'] = b
        b['next'] = c

        # circular d
        d = {'data': ['just list', 's'], 'next': None}
        e = {'data': 3.1415926, 'next': d}
        d['next'] = e

        tests = [{
            "result": c,
            "link": a,
        }, {
            "result": e,
            "link": d,
        }, {
            "result": None,
            "link": {
                'data': 0,
                "next": {
                    'data': None,
                    'next': {
                        'data': {
                            "data": 'fake link'
                        },
                        'next': None
                    }
                }
            }
        }, {
            "result": None,
            "link": {
                'data': 'only one ',
                'next': None
            },
        }, {
            "result": None,
            "link": {
                'data': -1,
                'next': {
                    'data': [1, 1995, -15],
                    'next': None
                }
            },
        }, {
            "result": None,
            "link": None,
        }]
        for test in tests:
            my_link = test['link']
            expected = test['result']
            obj = LinkedList([])
            obj.head = my_link
            result = obj.get_circular_link_item()
            if expected is None:
                self.assertIsNone(result)
            else:
                self.assertEqual(result, expected)
示例#6
0
 def test_find_middle_item(self):
     """
     test ml.misc.linked_list :: LinkedList :: find_middle_item
     :return:
     """
     from ml.misc.linked_list import LinkedList
     tests = [{
         "result": {
             'data': 1001,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 1001, 'string'],
     }, {
         "result": {
             'data': ['data', 'next'],
             'next': None
         },
         "my_list": [-3.14, ['data', 'next']],
     }, {
         "result": {
             'data': {
                 'data': 9,
                 'next': None
             },
             'next': None
         },
         "my_list": [-3.14, {
             'data': 9,
             "next": None
         }],
     }, {
         "result": {
             'data': -564,
             'next': {
                 'data': 'string',
                 'next': {
                     'data': ['list', '2'],
                     'next': {
                         'data': {
                             'data': 2
                         },
                         'next': None
                     }
                 }
             }
         },
         "my_list": [
             None, 0, 839842, 1995, -564, 'string', ['list', '2'], {
                 'data': 2
             }
         ]
     }, {
         "result": {
             'data': 9,
             'next': None
         },
         "my_list": [9],
     }, {
         "result": None,
         "my_list": 18,
     }, {
         "result": None,
         "my_list": None,
     }, {
         "result": None,
         "my_list": []
     }]
     for test in tests:
         my_list = test['my_list']
         expected = test['result']
         obj = LinkedList(my_list)
         result = obj.find_middle_item()
         if expected is None:
             self.assertIsNone(result)
         else:
             self.assertDictEqual(result, expected)
示例#7
0
    def test_delete(self):
        """
        test ml.misc.linked_list :: linkedLists :: delete
        :return:
        """
        from ml.misc.linked_list import LinkedList
        tests = [{
            "head": {
                'data': 3.14,
                'next': {
                    'data': 1001,
                    'next': None
                }
            },
            "my_list": [3.14, 1001, 'string'],
            "position": 2,
            "result": {
                'data': 'string',
                'next': None
            },
        }, {
            "head": {
                'data': ['data', 'next'],
                'next': None
            },
            "my_list": [-3.14, ['data', 'next']],
            "position": 0,
            "result": {
                'data': -3.14,
                'next': None
            },
        }, {
            "head": {
                'data': -3.14,
                'next': None
            },
            "my_list": [-3.14, {
                'data': 9,
                "next": None
            }],
            "position": 9999,
            "result": {
                'data': {
                    'data': 9,
                    "next": None
                },
                'next': None
            },
        }, {
            "head": None,
            "my_list": [9],
            "position": -6,
            "result": {
                'data': 9,
                'next': None
            },
        }, {
            "head": None,
            "my_list": 18,
            "position": -99,
            "result": None,
        }, {
            "head": None,
            "my_list": None,
            "position": 365,
            "result": None,
        }]
        for test in tests:
            my_list = test['my_list']
            print(my_list)
            expected = test['head']
            position = test['position']
            expected_return = test['result']
            obj = LinkedList(my_list)
            return_result = obj.delete(position)
            if isinstance(expected, dict):
                self.assertDictEqual(obj.head, expected)
            else:
                self.assertIsNone(obj.head)
            if isinstance(expected_return, dict):
                self.assertDictEqual(return_result, expected_return)
            else:
                self.assertIsNone(return_result)

        # exception check
        tests_ex = [{
            "position": 9.93,
        }, {
            "position": int,
        }, {
            "position": '35',
        }, {
            "position": [1, 8, 17],
        }]
        for test in tests_ex:
            my_list = [1, 2, 3, 4]
            position = test['position']
            obj = LinkedList(my_list)
            with self.assertRaises(TypeError):
                obj.delete(position)
示例#8
0
    def test_check_circular_link(self):
        """
        test ml.misc.linked_list :: LinkedList :: check_circular_link
        :return:
        """
        from ml.misc.linked_list import LinkedList

        # test True
        a = {'data': 99, 'next': None}
        b = {'data': 'string', 'next': None}
        c = {'data': [], 'next': a}
        a['next'] = b
        b['next'] = c
        d = {'data': 1, 'next': {'data': None, 'next': None}}
        e = {'data': 'pie', 'next': d}
        d['next']['next'] = e
        tests_true = [{
            "my_linked": a,
        }, {
            "my_linked": b,
        }, {
            "my_linked": c,
        }, {
            "my_linked": d,
        }, {
            "my_linked": e,
        }]
        for test in tests_true:
            my_linked = test["my_linked"]
            obj = LinkedList([])
            obj.head = my_linked
            result = obj.check_circular_link()
            self.assertTrue(result)

        # test False
        tests = [{
            "my_list": [9, 88.5, -773],
        }, {
            "my_list": [-9, 3.1415926, 'string'],
        }, {
            "my_list": [None, {
                'launch': 'bread'
            }, 'string'],
        }, {
            "my_list": [7],
        }]
        for test in tests:
            my_list = test['my_list']
            obj = LinkedList(my_list)
            result = obj.check_circular_link()
            self.assertFalse(result)
        # exception check
        tests_ex = [{
            "my_list": 9.93,
        }, {
            "my_list": int,
        }, {
            "my_list": '35',
        }, {
            "my_list": [],
        }]
        for test in tests_ex:
            my_list = test['my_list']
            obj = LinkedList(my_list)
            result = obj.check_circular_link()
            self.assertIsNone(result)
示例#9
0
 def test_append(self):
     """
     test ml.misc.linked_list :: LinkedList :: append
     :return:
     """
     from ml.misc.linked_list import LinkedList
     tests = [{
         "head": {
             'data': 9,
             'next': {
                 'data': 88.5,
                 'next': {
                     'data': -773,
                     'next': {
                         'data': -39.9,
                         'next': None
                     }
                 }
             }
         },
         "my_list": [9, 88.5, -773],
         "append_item": -39.9,
     }, {
         "head": {
             'data': 3.1415926,
             'next': {
                 'data': 'string',
                 'next': {
                     'data': 'string2',
                     'next': None
                 }
             }
         },
         "my_list": [3.1415926, 'string'],
         "append_item": 'string2',
     }, {
         "head": {
             'data': {
                 'launch': 'bread'
             },
             'next': {
                 'data': None,
                 'next': {
                     'data': [1, 2, 3, 4],
                     'next': None
                 }
             }
         },
         "my_list": [{
             'launch': 'bread'
         }, None],
         "append_item": [1, 2, 3, 4],
     }, {
         "head": {
             'data': 7,
             'next': {
                 'data': [],
                 'next': None
             }
         },
         "my_list": [7],
         "append_item": [],
     }, {
         "head": {
             'data': 7.77,
             'next': None
         },
         "my_list": [],
         "append_item": 7.77
     }, {
         "head": {
             'data': None,
             'next': None
         },
         "my_list": None,
         "append_item": None,
     }, {
         "head": {
             'data': 'string',
             'next': None
         },
         "my_list": 5,
         "append_item": 'string'
     }, {
         "head": {
             'data': {
                 'data': None,
                 'next': None
             },
             'next': None
         },
         "my_list": None,
         "append_item": {
             'data': None,
             'next': None
         },
     }]
     for test in tests:
         my_list = test['my_list']
         expected = test['head']
         input_item = test['append_item']
         obj = LinkedList(my_list)
         obj.append(input_item)
         if isinstance(expected, dict):
             self.assertDictEqual(obj.head, expected)
         else:
             self.assertIsNone(obj.head)
示例#10
0
 def test_add(self):
     """
     test ml.misc.linked_list :: LinkedList :: add
     :return:
     """
     from ml.misc.linked_list import LinkedList
     tests = [{
         "result": {
             'data': 'add',
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'add',
                 'next': {
                     'data': 'string',
                     'next': None
                 }
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": 1,
     }, {
         "result": {
             'data': -87.345,
             'next': {
                 'data': -3.14,
                 'next': {
                     'data': ['data', 'next'],
                     'next': None
                 }
             }
         },
         "head": {
             'data': -87.345,
             'next': {
                 'data': -3.14,
                 'next': {
                     'data': ['data', 'next'],
                     'next': None
                 }
             }
         },
         "my_list": [-3.14, ['data', 'next']],
         "item": -87.345,
         "position": 0,
     }, {
         "result": {
             'data': {0},
             'next': None
         },
         "head": {
             'data': -3.14,
             'next': {
                 'data': {
                     'data': 9,
                     'next': None
                 },
                 'next': {
                     'data': {0},
                     'next': None
                 }
             }
         },
         "my_list": [-3.14, {
             'data': 9,
             "next": None
         }],
         "item": {0},
         "position": 9999,
     }, {
         "result": {
             'data': None,
             'next': {
                 'data': 9,
                 'next': None
             }
         },
         "head": {
             'data': None,
             'next': {
                 'data': 9,
                 'next': None
             }
         },
         "my_list": [9],
         "item": None,
         "position": -6,
     }, {
         "result": {
             'data': [1, 2, 99, 'only list'],
             'next': None
         },
         "head": {
             'data': [1, 2, 99, 'only list'],
             'next': None
         },
         "my_list": 18,
         "item": [1, 2, 99, 'only list'],
         "position": -99,
     }, {
         "result": {
             'data': [],
             'next': None
         },
         "head": {
             'data': [],
             'next': None
         },
         "my_list": None,
         "item": [],
         "position": 365,
     }, {
         "result": None,
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": 9.93,
     }, {
         "result": None,
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": int,
     }, {
         "result": None,
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": 'string',
     }, {
         "result": None,
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": [1, 2, 5, 9],
     }, {
         "result": None,
         "head": {
             'data': 3.14,
             'next': {
                 'data': 'string',
                 'next': None
             }
         },
         "my_list": [3.14, 'string'],
         "item": 'add',
         "position": {
             '2': 2,
             '3': 3
         },
     }]
     for test in tests:
         my_list = test['my_list']
         expected_head = test['head']
         input_item = test['item']
         position = test['position']
         expected = test['result']
         obj = LinkedList(my_list)
         result = obj.add(input_item, position)
         self.assertDictEqual(obj.head, expected_head)
         self.assertEqual(result, expected)