def cube(edge_length):
    """A cube has six square faces and twelve edges.

    The function will return triangular facets rather than quadrilateral facets, so
    each square face will become two triangles, giving twelve facets.

    This solid is also known as:
    - a square parallelepiped
    - an equilateral cuboid
    - a right rhombohedron
    - a regular hexahedron
    """

    half_edge_length = edge_length / 2

    vertices = [
        (half_edge_length, half_edge_length, half_edge_length),
        (half_edge_length, -half_edge_length, half_edge_length),
        (-half_edge_length, -half_edge_length, half_edge_length),
        (-half_edge_length, half_edge_length, half_edge_length),

        (half_edge_length, half_edge_length, -half_edge_length),
        (half_edge_length, -half_edge_length, -half_edge_length),
        (-half_edge_length, -half_edge_length, -half_edge_length),
        (-half_edge_length, half_edge_length, -half_edge_length),
    ]

    # An improvement to the faces would be to have all the triangles that form
    # the sides of the cube, forming two larger triangles instead of
    # parallelograms.
    faces = [
        (0, 1, 2),
        (0, 2, 3),
        (0, 1, 5),
        (0, 5, 4),
        (0, 4, 7),
        (0, 7, 3),
        (3, 2, 6),
        (3, 6, 7),
        (1, 6, 5),
        (1, 6, 2),
        (4, 5, 6),
        (4, 6, 7)
    ]

    return vertices, faces