def test_2d(self):
        # one triangle
        s = [[[0, 1, 2]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2]])
        assert_equal(asc.simplices[1], [[0, 1], [0, 2], [1, 2]])
        assert_equal(asc.simplices[2], [[0, 1, 2]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0, 0, 0]])
        assert_equal(B1, [[-1, -1, 0], [1, 0, -1], [0, 1, 1]])
        assert_equal(B2, [[1], [-1], [1]])

        # one triangle, one redundant edge
        s = [[[0, 2]], [[0, 1, 2]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2]])
        assert_equal(asc.simplices[1], [[0, 1], [0, 2], [1, 2]])
        assert_equal(asc.simplices[2], [[0, 1, 2]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0, 0, 0]])
        assert_equal(B1, [[-1, -1, 0], [1, 0, -1], [0, 1, 1]])
        assert_equal(B2, [[1], [-1], [1]])

        # one triangle, two maximal edges
        s = [[[0, 3], [4, 5]], [[0, 1, 2]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2], [3], [4], [5]])
        assert_equal(asc.simplices[1],
                     [[0, 1], [0, 2], [0, 3], [1, 2], [4, 5]])
        assert_equal(asc.simplices[2], [[0, 1, 2]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0, 0, 0, 0, 0, 0]])
        assert_equal(B1,
                     [[-1, -1, -1, 0, 0], [1, 0, 0, -1, 0], [0, 1, 0, 1, 0],
                      [0, 0, 1, 0, 0], [0, 0, 0, 0, -1], [0, 0, 0, 0, 1]])
        assert_equal(B2, [[1], [-1], [0], [1], [0]])
    def test_1d(self):
        # two edges
        s = [  [[0,1],[2,3]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2],[3]])
        assert_equal(asc.simplices[1], [[0,1],[2,3]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0,0,0,0]])
        assert_equal(B1, [[-1, 0],
                          [ 1, 0],
                          [ 0,-1],
                          [ 0, 1]])
        
        # two edges, two redundant vertices
        s = [  [[0],[2]],  [[0,1],[2,3]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2],[3]])
        assert_equal(asc.simplices[1], [[0,1],[2,3]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0,0,0,0]])
        assert_equal(B1, [[-1, 0],
                          [ 1, 0],
                          [ 0,-1],
                          [ 0, 1]])

        # two edges, two maximal vertices
        s = [  [[2],[5]],  [[0,1],[3,4]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2],[3],[4],[5]])
        assert_equal(asc.simplices[1], [[0,1],[3,4]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0,0,0,0,0,0]])
        assert_equal(B1, [[-1, 0],
                          [ 1, 0],
                          [ 0, 0],
                          [ 0,-1],
                          [ 0, 1],
                          [ 0, 0]])
    def test_1d(self):
        # two edges
        s = [[[0, 1], [2, 3]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2], [3]])
        assert_equal(asc.simplices[1], [[0, 1], [2, 3]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0, 0, 0, 0]])
        assert_equal(B1, [[-1, 0], [1, 0], [0, -1], [0, 1]])

        # two edges, two redundant vertices
        s = [[[0], [2]], [[0, 1], [2, 3]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2], [3]])
        assert_equal(asc.simplices[1], [[0, 1], [2, 3]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0, 0, 0, 0]])
        assert_equal(B1, [[-1, 0], [1, 0], [0, -1], [0, 1]])

        # two edges, two maximal vertices
        s = [[[2], [5]], [[0, 1], [3, 4]]]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0], [1], [2], [3], [4], [5]])
        assert_equal(asc.simplices[1], [[0, 1], [3, 4]])

        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()

        assert_equal(B0, [[0, 0, 0, 0, 0, 0]])
        assert_equal(B1, [[-1, 0], [1, 0], [0, 0], [0, -1], [0, 1], [0, 0]])
    def test_2d(self):
        # one triangle
        s = [  [[0,1,2]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2]])
        assert_equal(asc.simplices[1], [[0,1],[0,2],[1,2]])
        assert_equal(asc.simplices[2], [[0,1,2]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0,0,0]])
        assert_equal(B1, [[-1,-1, 0],
                          [ 1, 0,-1],
                          [ 0, 1, 1]])
        assert_equal(B2, [[ 1],
                          [-1],
                          [ 1]])
        
        # one triangle, one redundant edge
        s = [  [[0,2]],  [[0,1,2]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2]])
        assert_equal(asc.simplices[1], [[0,1],[0,2],[1,2]])
        assert_equal(asc.simplices[2], [[0,1,2]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0,0,0]])
        assert_equal(B1, [[-1,-1, 0],
                          [ 1, 0,-1],
                          [ 0, 1, 1]])
        assert_equal(B2, [[ 1],
                          [-1],
                          [ 1]])
        
        # one triangle, two maximal edges
        s = [  [[0,3],[4,5]],  [[0,1,2]]  ]
        asc = abstract_simplicial_complex(s)
        assert_equal(asc.simplices[0], [[0],[1],[2],[3],[4],[5]])
        assert_equal(asc.simplices[1], [[0,1],[0,2],[0,3],[1,2],[4,5]])
        assert_equal(asc.simplices[2], [[0,1,2]])
        
        B0 = asc.chain_complex()[0].todense()
        B1 = asc.chain_complex()[1].todense()
        B2 = asc.chain_complex()[2].todense()

        assert_equal(B0, [[0,0,0,0,0,0]])
        assert_equal(B1, [[-1,-1,-1, 0, 0],
                          [ 1, 0, 0,-1, 0],
                          [ 0, 1, 0, 1, 0],
                          [ 0, 0, 1, 0, 0],
                          [ 0, 0, 0, 0,-1],
                          [ 0, 0, 0, 0, 1]])
        assert_equal(B2, [[ 1],
                          [-1],
                          [ 0],
                          [ 1],
                          [ 0]])