manim/tests/test_boolean_ops.py
Laith Bahodi e040bcacd3
Improved structure of the :mod:.mobject module (#2476)
* group graphing and update its references

* group text and update its references

* group opengl and update its references

* group three_d and update its references

* group geometry and update (most) references

* move some chaning.py + updater files  into animation

* refactor arc.py

* refactor line.py

* refactor polygram.py

* refactor tips.py

* black + isort

* import new files in __init__.py

* refactor places where geometry was used

* black + isort again

* remove unused imports

* update reference.rst

* add descriptions to files

* fix circular imports

* forgot ArrowTip

* fix tests

* fix doctests

* satisfy mypy?

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix ALL merge conflicts

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* one VMobject import slipped through

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* re-add imports to `manim/opengl/__init__.py`

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix reference manual

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* ignore unknown directive type

* fix arrow tip imports in docstrings

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Benjamin Hackl <devel@benjamin-hackl.at>
2022-02-24 09:29:28 +01:00

58 lines
1.5 KiB
Python

from __future__ import annotations
import numpy as np
import pytest
from manim import Circle, Square
from manim.mobject.geometry.boolean_ops import _BooleanOps
@pytest.mark.parametrize(
"test_input,expected",
[
(
[(1.0, 2.0), (3.0, 4.0)],
[
np.array([1.0, 2.0, 0]),
np.array([3.0, 4.0, 0]),
],
),
(
[(1.1, 2.2)],
[
np.array([1.1, 2.2, 0.0]),
],
),
],
)
def test_convert_2d_to_3d_array(test_input, expected):
a = _BooleanOps()
result = a._convert_2d_to_3d_array(test_input)
assert len(result) == len(expected)
for i in range(len(result)):
assert (result[i] == expected[i]).all()
def test_convert_2d_to_3d_array_zdim():
a = _BooleanOps()
result = a._convert_2d_to_3d_array([(1.0, 2.0)], z_dim=1.0)
assert (result[0] == np.array([1.0, 2.0, 1.0])).all()
@pytest.mark.parametrize(
"test_input",
[
Square(),
Circle(),
Square(side_length=4),
Circle(radius=3),
],
)
def test_vmobject_to_skia_path_and_inverse(test_input):
a = _BooleanOps()
path = a._convert_vmobject_to_skia_path(test_input)
assert len(list(path.segments)) > 1
new_vmobject = a._convert_skia_path_to_vmobject(path)
# for some reason there is an extra 4 points in new vmobject than original
assert np.where(np.isclose(new_vmobject.points[:-4], test_input.points))