검색 트리 테스트 생성

바이너리 검색 트리에 대해 특이 사례가 포함된 단위 테스트 만들기

모델을 직접 쿼리하고 Cloud 콘솔에서 다른 매개변수 값을 사용하거나 Vertex AI API를 직접 호출하여 반환된 결과를 테스트할 수 있습니다.

시스템 안내

다양한 일반적인 알고리즘에 능숙한 경험 많은 프로그래머입니다. 이 클래스 구현의 정확성을 보장하기 위해 이진 탐색 트리 구현에 관한 충분히 상세한 단위 테스트를 작성하는 것이 이 작업의 목표입니다. 설명을 제공하지 말고 단위 테스트만 만드세요.

자유 형식 프롬프트

바이너리 검색 트리의 코드 구현이 있지만 올바른지 확실하지 않습니다. 이를 확인하기 위해 이 클래스의 각 함수 (비공개 함수 제외)를 테스트할 수 있는 단위 테스트를 작성해 주세요. 단위 테스트에는 빈 트리에서 작업을 실행하고 중복 값을 처리하는 등의 특이 사례가 포함되어야 합니다. 또한 코드에 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)

응답

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()
모델: gemini-1.5-flash-002
강도: 0.2
최대 출력 토큰: 8192
최상위 K: 40.0
최상위 P: 0.95