Skip to content

Test cases for check_bipartite_graph_bfs #10688

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
45 changes: 45 additions & 0 deletions graphs/check_bipartite_graph_bfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,48 @@


def check_bipartite(graph):
"""
>>> check_bipartite({})
True
>>> check_bipartite({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})
True
>>> check_bipartite({0: [1, 2, 3], 1: [0, 2], 2: [0, 1, 3], 3: [0, 2]})
False
>>> check_bipartite({0: [4], 1: [], 2: [4], 3: [4], 4: [0, 2, 3]})
True
>>> check_bipartite({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})
False
Copy link
Member

@cclauss cclauss Oct 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add some negative values, floating point values, and some strings.
Also,
{}
{7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]}
{0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the additional test cases! I'll have to refactor the code a bit as it assumes that there's keys for all values from 0 to n. Will add different data types as well.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is OK to fail if the input is not 1 to n or if other garbage data is provided. We just want to ensure the code does safe things in the face of garbage data. Raising a ValueError is safe.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood. Thanks for the clarification!

>>> check_bipartite({7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})
Traceback (most recent call last):
...
KeyError: 0
>>> check_bipartite({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]})
Traceback (most recent call last):
...
KeyError: 4
>>> check_bipartite({0: [-1, 3], 1: [0, -2]})
Traceback (most recent call last):
...
IndexError: list index out of range
>>> check_bipartite({-1: [0, 2], 0: [-1, 1], 1: [0, 2], 2: [-1, 1]})
True
>>> check_bipartite({0.9: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})
Traceback (most recent call last):
...
KeyError: 0
>>> check_bipartite({0: [1.0, 3.0], 1.0: [0, 2.0], 2.0: [1.0, 3.0], 3.0: [0, 2.0]})
Traceback (most recent call last):
...
TypeError: list indices must be integers or slices, not float
>>> check_bipartite({"a": [1, 3], "b": [0, 2], "c": [1, 3], "d": [0, 2]})
Traceback (most recent call last):
...
KeyError: 0
>>> check_bipartite({0: ["b", "d"], 1: ["a", "c"], 2: ["b", "d"], 3: ["a", "c"]})
Traceback (most recent call last):
...
TypeError: list indices must be integers or slices, not str
"""
queue = Queue()
visited = [False] * len(graph)
color = [-1] * len(graph)
Expand Down Expand Up @@ -45,3 +87,6 @@ def bfs():
if __name__ == "__main__":
# Adjacency List of graph
print(check_bipartite({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}))
import doctest

doctest.testmod()