0 / 0 / 0
Регистрация: 17.07.2019
Сообщений: 15
1

Проверить функцию удаления элемента из двунаправленного связанного списка . unittest - том

03.10.2019, 16:10. Показов 1495. Ответов 5
Метки нет (Все метки)

Есть двунаправленный связанный список удаляем из него элемент нужно проверить unittest - том
  1. Корректности полей head и tail после всех этих операций.
  1. Правильными ли получились сцепки внутри списка после удаления, указывает ли предыдущий перед удалённым узел на следующий
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Node:
    def __init__(self, v, p=None, n=None):
        self.value = v
        self.prev = p
        self.next = n
 
class LinkedList2:
    def __init__(self):
        self.head = None
        self.tail = None
 
    def add_in_tail(self, item):
        if self.head is None:
            self.head = item
            item.prev = None
            item.next = None
        else:
            self.tail.next = item
            item.prev = self.tail
        self.tail = item
    def delete(self, val, all=False):
        one_run = self.head
        if self.head == None:  # после нахождения 1 го запускать цикл по новой
            return
        if one_run.value == val and self.head.next == None:  # если удаляем один элемент
            self.head = self.tail = None
            return
        if one_run.value == val:  # если удаляем первый элемент
            self.head = self.head.next
            one_run.next.prev = None
            one_run.next = None
            one_run = self.head
            if all == False:
                return
        while one_run is not None:
            if one_run.value == val and one_run.next != None:
                one_run = one_run.prev
                one_run.next = one_run.next.next
                one_run = one_run.next
                one_run.prev = one_run.prev.prev
                one_run = one_run.prev
                if all == False:
                    return
            if one_run.value == val and one_run.next == None:  # если в составе удаленного есть последний элемент
                one_run = one_run.prev
                one_run.next = None  # one_run.next.next
                self.tail = one_run
                if all == False:
                    return
            else:
                one_run = one_run.next
ну пример unittest - та
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import unittest
 
class MyTestCase(unittest.TestCase):
 
    def test_delete(self):  # сравниваем после удвления элемента в пустой список
        my_list = LinkedList2.LinkedList2()
        my_list.add_in_tail(LinkedList2.Node(54))
        my_list.delete(54)
        self.assertEqual(my_list.head, my_list.tail)
        self.assertEqual(my_list.head, None)
        self.assertEqual(my_list.tail, None)
 
    def test_delete_end(self):  # сравниваем после удвления элемента из середины
        my_list = LinkedList2.LinkedList2()
        x = my_list.add_in_tail(LinkedList2.Node(10))
        my_list.add_in_tail(LinkedList2.Node(20))
        my_list.add_in_tail(LinkedList2.Node(30))
        my_list.add_in_tail(LinkedList2.Node(40))
        my_list.delete(30)
        self.assertEqual(my_list.head, x.self.head , 'хвосты не равны')
        self.assertEqual(my_list.head, None)
        self.assertEqual(my_list.tail, None)
 
if __name__ == '__main__':
    unittest.main()
соответственно первая функция в тесте отрабатывает , а вторая нет..подскажите как правильно обстрелять ее тестами?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2019, 16:10
Ответы с готовыми решениями:

Как будет выглядеть процедура удаления элемента из двунаправленного списка?
Построить процедуру удаления элемента из двунаправленного списка

Как осуществить загрузку двунаправленного связанного списка из файла?
имеется функция записи(естественно Employer это структура)void savelist(Employer *p, char* fname)...

Написать функцию удаления элемента из списка
Надо написать функцию Void del (int value) , которая удаляет элемент в списке и Elem *searth (int...

Поправить функцию удаления последнего элемента односвязного списка
#include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace std; struct...

5
Эксперт Python
4603 / 2024 / 359
Регистрация: 17.03.2012
Сообщений: 10,078
Записей в блоге: 6
04.10.2019, 12:47 2
Тестами не обстреливают, ими покрывают.
А почему вы решили, что ошибка именно в тесте, а не тестируемом классе?
0
0 / 0 / 0
Регистрация: 17.07.2019
Сообщений: 15
04.10.2019, 13:57  [ТС] 3
А вы считаете что в тесте нет ошибки?
0
Эксперт Python
4603 / 2024 / 359
Регистрация: 17.03.2012
Сообщений: 10,078
Записей в блоге: 6
04.10.2019, 17:26 4
alesi, понятия не имею. Но тест проще, чем рабочий код, и вероятность ошибки там меньше. Собственно, в этом и есть прелесть тестов.
0
0 / 0 / 0
Регистрация: 17.07.2019
Сообщений: 15
07.10.2019, 13:06  [ТС] 5
нет в коде точно ошибки нет, я не могу сделать тест кода по заданным условиям, мне нужна в этом помощь
0
Эксперт Python
4603 / 2024 / 359
Регистрация: 17.03.2012
Сообщений: 10,078
Записей в блоге: 6
07.10.2019, 13:19 6
alesi, почему не можете?
Тест есть короткая программа, которая описывает, как ваш код должен выглядеть "снаружи". То есть, в данном случае - описать, как должен себя вести ваш linked list, одна ситуация.
Ну если вы так уверены в своём коде - окей, ищите ошибку в тесте.

Правда, есть у меня некоторые сомнения, что ваш код правилен. Во-первых, x.self - это что такое? Атрибут self у Node отсутствует. А если бы он был - это был бы плохой стиль, потому что self принято использовать для других целей.
Во-вторых, я там увидел поиск элемента, цикл while в процедуре delete. Вынестите поиск отдельно, проще будет тестировать. Код несколько неаккуратный. Что такое one_run? Совершенно ничего не говорящее название. Похоже, что это текущий элемент при переборе. Так что я не столь уверен насчёт надёжности рабочего кода.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2019, 13:19
Помогаю со студенческими работами здесь

Определить рекурсивную функцию для удаления последнего элемента списка
Определить рекурсивную функцию для удаления последнего элемента списка

Определить в классе статическую компоненту - указатель на начало связанного списка объектов и функцию просмотра списка
Помогите пожалуйста доделать программу. Необходимо определить в классе статическую компоненту -...

Удаление элемента из связанного списка
Нужно удалить все элементы списка кратные 3. void Del() { if (head == NULL) cout << "\nСписок...

Удаление элемента связанного списка
Здравствуйте, у меня есть программа и нужно удалить элемент из связанного списка по порядковому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru