def setUp(self):
     self.nb = NaiveBuffer(SIZE)
class TestNaiveBuffer(unittest.TestCase):
    
    def setUp(self):
        self.nb = NaiveBuffer(SIZE)
        
    def tearDown(self):
        self.nb = None
        
    def test_basic(self):
        """Basic test."""
        self.assertTrue(self.nb.isEmpty())
        self.assertFalse(self.nb.isFull())
        self.assertEqual(0, len(self.nb))

    def test_fill(self):
        """Fill up the buffer."""
        for _ in range(SIZE):
            self.nb.add(_)

        self.assertFalse(self.nb.isEmpty())
        self.assertTrue(self.nb.isFull())
        self.assertEqual(5, len(self.nb))

        
    def test_overFill(self):
        """Validate can deal with overfill."""
        high = 15
        for _ in range(high):
            self.nb.add(_)

        self.assertFalse(self.nb.isEmpty())
        self.assertTrue(self.nb.isFull())
        self.assertEqual(5, len(self.nb))

        # check all are still present
        for _ in range(high-1, high - SIZE-1, -1):
            self.assertTrue(_ in self.nb)

    def test_fillWithRemove(self):
        """Validate can deal with removals."""
        high = 15
        for _ in range(high):
            self.nb.add(_)
            self.nb.remove()

        self.assertTrue(self.nb.isEmpty())
        self.assertFalse(self.nb.isFull())
        self.assertEqual(0, len(self.nb))

    def test_randomUsage(self):
        """Try random behavior."""
        for _ in range(1000):
            if random.random() < 0.75:
                self.nb.add(random.random())
            elif not self.nb.isEmpty():
                self.nb.remove()