import random
import unittest
import sand.py

class TestSand(unittest.TestCase):

    def setUp(self):
        self.seq = range(10)

    def test_fallFree(self):
        """
        the sand fall if nothing under
        """
        start = [((0,0,0),(None))]
        expected = [((0,-1,0),(None))]
        got = None
        self.assertEqual(expected, got)

    def test_fallBottomNotFree(self):
        """
        the sand fall diagonaly if something under but not aside
        """
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None))]
        expected = [((-1,-1,0),(None)),((1,-1,0),(None)),((0,-1,-1),(None)),((0,-1,-1),(None))]
        got = None
        self.assertTrue(got in expected)

    def test_fallNot(self):
        """
        sand dont move if all diagonal and under is occupied
        """
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None)),((-1,-1,0),(None)),((1,-1,0),(None)),((0,-1,-1),(None)),((0,-1,-1),(None)),]
        expected = [((0,0,0),(None))]
        got = None
        self.assertTrue(got in expected)
        
    def test_fallBottomLeft(self):
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None)),((1,-1,0),(None)),((0,-1,-1),(None)),((0,-1,-1),(None)),]
        expected = [((-1,-1,0),(None))]
        got = None
        self.assertTrue(got in expected)
        
    def test_fallBottomRight(self):
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None)),((-1,-1,0),(None)),((0,-1,-1),(None)),((0,-1,-1),(None)),]
        expected = [((1,-1,0),(None))]
        got = None
        self.assertTrue(got in expected)
        
    def test_fallBottomFront(self):
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None)),((-1,-1,0),(None)),((1,-1,0),(None)),((0,-1,-1),(None)),]
        expected = [((0,-1,1),(None))]
        got = None
        self.assertTrue(got in expected)
        
    def test_fallBottomBack(self):
        start = [((0,0,0),(None))]
        env = [((0,-1,0),(None)),((-1,-1,0),(None)),((1,-1,0),(None)),((0,-1,-1),(None)),]
        expected = [((0,-1,-1),(None))]
        got = None
        self.assertTrue(got in expected)

if __name__ == '__main__':
    unittest.main()
