Nantes Université

Skip to content
Extraits de code Groupes Projets
Test03AddContainsNbCompareMin.kt 4,92 ko
Newer Older
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
import but3.collections.BinarySearchTree
import but3.collections.KeyAlreadyPresentException
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.CsvSource

class Test03AddContainsNbCompareMin {
    lateinit var bst: BinarySearchTree<InstInt>

    @BeforeEach
    fun initialise() {
        bst = BinarySearchTree()
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(10))
        bst.add0(InstInt(3))
        bst.add0(InstInt(5))
        bst.add0(InstInt(7))
        bst.add0(InstInt(100))
        bst.add0(InstInt(30))
        bst.add0(InstInt(20))
        bst.add0(InstInt(45))
        bst.add0(InstInt(50))
        bst.add0(InstInt(48))
        bst.add0(InstInt(60))
        bst.add0(InstInt(10000))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        BinarySearchTree.reinit()
        InstInt.nbCompare = 0
    }

    @Test
    fun buildBST() {
        bst = BinarySearchTree()
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(10))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(0, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(3))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(1, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(5))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(3, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(7))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(6, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(100))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(7, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(30))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(9, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(20))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(12, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(45))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(15, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(50))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(19, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(48))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(24, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(60))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(29, InstInt.nbCompare)
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        bst.add0(InstInt(10000))
Arnaud LANOIX's avatar
Arnaud LANOIX a validé
        assertEquals(31, InstInt.nbCompare)
    }

    @Test
    fun notEmpty() {
        assertEquals(0, BinarySearchTree.searchCalls)
        assertEquals(0, InstInt.nbCompare)
        assertAll(
            { assertFalse(bst.isEmpty()) },
            { assertEquals(12, bst.size()) },
            { assertEquals(5, bst.height()) },
            { assertEquals(5, bst.nbLeafs()) },
            { assertFalse(bst.contains0(InstInt(666))) },
        )
        assertEquals(0, BinarySearchTree.searchCalls)
        assertEquals(3, InstInt.nbCompare)
    }

    @Test
    fun contains() {
        assertFalse(bst.contains0(InstInt(666)))
        assertEquals(3, InstInt.nbCompare)
        assertEquals(0, BinarySearchTree.searchCalls)
    }

    @Test
    fun size12() {
        assertEquals(12, bst.size())
    }

    @Test
    fun height6() {
        assertEquals(5, bst.height())
    }

    @Test
    fun leafs5() {
        assertEquals(5, bst.nbLeafs())
    }


    @Test
    fun printString() {
        // NORMAL QUE CE CAS DE TEST ECHOUE
        println(bst)
        val expected =
            "└─> 10\n" +
                    "    ├─> 3\n" +
                    "    │   └─< 5\n" +
                    "    │       └─< 7\n" +
                    "    └─< 100\n" +
                    "        ├─> 30\n" +
                    "        │   ├─> 20\n" +
                    "        │   └─< 45\n" +
                    "        │       └─< 50\n" +
                    "        │           ├─> 48\n" +
                    "        │           └─< 60\n" +
                    "        └─< 10000\n"
        assertEquals(expected, bst.toString())
    }

    @ParameterizedTest(name = "element contained : {0}")
    @CsvSource(
        "10, 1",
        "3, 2",
        "5, 3",
        "7, 4",
        "100, 2",
        "30, 3",
        "20, 4",
        "45, 4",
        "50, 5",
        "48, 6",
        "60, 6",
        "10000, 3"
    )
    fun containsElement(contained: Int, expectedCompare: Int) {
        assertTrue(bst.contains0(InstInt(contained)))
        assertEquals(0, BinarySearchTree.searchCalls)
        assertEquals(expectedCompare, InstInt.nbCompare)
    }

    @ParameterizedTest(name = "element contained : {0}")
    @CsvSource(
        "42,4",
        "2,2",
        "0,2",
        "1000,3",
        "-3,2",
        "666,3"
    )
    fun notContainsElement(contained: Int, expectedCompare: Int) {
        assertFalse(bst.contains0(InstInt(contained)))
        assertEquals(0, BinarySearchTree.searchCalls)
        assertEquals(expectedCompare, InstInt.nbCompare)
    }

    @ParameterizedTest(name = "element added : {0} : impossible")
    @CsvSource(
        "10, 1",
        "3, 2",
        "5, 3",
        "7, 4",
        "100, 2",
        "30, 3",
        "20, 4",
        "45, 4",
        "50, 5",
        "48, 6",
        "60, 6",
        "10000, 3"
    )
    fun addException(added: Int, expectedCompare: Int) {
        assertThrows<KeyAlreadyPresentException> { bst.add0(InstInt(added)) }
        assertEquals(0, BinarySearchTree.searchCalls)
        assertEquals(expectedCompare, InstInt.nbCompare)
    }
}