Istruzioni di sistema |
Sei un programmatore esperto, esperto di vari algoritmi comuni. Il tuo compito è creare test di unità sufficientemente dettagliati per l'implementazione di un albero di ricerca binaria per garantire la correttezza dell'implementazione di questa classe. Non fornire spiegazioni, ma crea solo i test di unità.
|
Ho un'implementazione di codice di un albero di ricerca binaria, ma non so se è corretta. Per conferma, spero che tu possa scrivere test di unità per consentirmi di testare ogni funzione (tranne le funzioni private) in questa classe. I test di unità devono includere casi limite come l'esecuzione di operazioni su un albero vuoto e la gestione di valori duplicati. Inoltre, il codice deve contenere una funzione main .
bst.py
from dataclasses import dataclass
from typing import Optional
@dataclass
class TreeNode:
value: int
left: Optional['TreeNode'] = None
right: Optional['TreeNode'] = None
class BST:
def __init__(self):
self.root: Optional[TreeNode] = None
def insert(self, value: int) -> None:
if not self.root:
self.root = TreeNode(value)
else:
self._insert_helper(self.root, value)
def _insert_helper(self, node: TreeNode, value: int) -> None:
if value < node.value:
if node.left is None:
node.left = TreeNode(value)
else:
self._insert_helper(node.left, value)
else:
if node.right is None:
node.right = TreeNode(value)
else:
self._insert_helper(node.right, value)
def find(self, value: int) -> Optional[TreeNode]:
return self._find_helper(self.root, value)
def _find_helper(self, node: Optional[TreeNode], value: int) -> Optional[TreeNode]:
if node is None or node.value == value:
return node
if value < node.value:
return self._find_helper(node.left, value)
return self._find_helper(node.right, value)
def _lookup_min(self, node: TreeNode) -> TreeNode:
current = node
while current.left:
current = current.left
return current
def print_inorder(self) -> None:
self._print_inorder_helper(self.root)
print()
def _print_inorder_helper(self, node: Optional[TreeNode]) -> None:
if node:
self._print_inorder_helper(node.left)
print(node.value, end=' ')
self._print_inorder_helper(node.right)
Risposta
import unittest
from bst import BST, TreeNode
class TestBST(unittest.TestCase):
def test_insert_empty(self):
bst = BST()
bst.insert(5)
self.assertEqual(bst.root.value, 5)
def test_insert_multiple(self):
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(1)
bst.insert(4)
bst.insert(6)
bst.insert(8)
self.assertEqual(bst.root.value, 5)
self.assertEqual(bst.root.left.value, 3)
self.assertEqual(bst.root.right.value, 7)
def test_insert_duplicates(self):
bst = BST()
bst.insert(5)
bst.insert(5)
self.assertEqual(bst.root.value, 5)
self.assertIsNone(bst.root.left)
self.assertIsNone(bst.root.right)
def test_find_empty(self):
bst = BST()
self.assertIsNone(bst.find(5))
def test_find_present(self):
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
self.assertEqual(bst.find(5).value, 5)
self.assertEqual(bst.find(3).value, 3)
self.assertEqual(bst.find(7).value, 7)
def test_find_absent(self):
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
self.assertIsNone(bst.find(1))
self.assertIsNone(bst.find(9))
def test_find_duplicates(self):
bst = BST()
bst.insert(5)
bst.insert(5)
self.assertEqual(bst.find(5).value, 5)
def test_print_inorder_empty(self):
bst = BST()
bst.print_inorder()
def test_print_inorder_non_empty(self):
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(1)
bst.insert(4)
bst.insert(6)
bst.insert(8)
bst.print_inorder()
if __name__ == '__main__':
unittest.main()
|
Modello: |
gemini-1.5-flash-002 |
Temperatura: |
0,2 |
Numero massimo di token di output: |
8192 |
TopK: |
40,0 |
TopP: |
0,95 |
|