30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
"""Tests der Beispielszene."""
|
|
|
|
import random
|
|
|
|
from sandbox.config import INTERACTION, TIME_STEP, DemoSceneConfig, Theme
|
|
from sandbox.demo import build_demo_scene
|
|
from sandbox.interaction import BodyFactory, ToolSettings
|
|
from tests.helpers import make_world
|
|
|
|
|
|
def test_demo_scene_fits_into_the_world_and_settles() -> None:
|
|
world = make_world(1020, 720)
|
|
factory = BodyFactory(world, INTERACTION, Theme().body_palette, random.Random(0))
|
|
scene = DemoSceneConfig()
|
|
build_demo_scene(factory, ToolSettings.from_config(INTERACTION), scene)
|
|
|
|
pyramid = scene.pyramid_rows * (scene.pyramid_rows + 1) // 2
|
|
assert len(world.bodies) == scene.tower_levels + pyramid + scene.ball_count
|
|
for body in world.bodies:
|
|
min_x, min_y, max_x, max_y = body.bounds()
|
|
assert min_x >= 0 and max_x <= world.width
|
|
assert min_y >= 0 and max_y <= world.height
|
|
|
|
for _ in range(round(4 / TIME_STEP)):
|
|
world.step(TIME_STEP)
|
|
tower = world.bodies[: scene.tower_levels]
|
|
assert all(body.sleeping for body in tower) # der Turm steht ruhig
|
|
tops = [body.position.y for body in tower]
|
|
assert tops == sorted(tops, reverse=True) # und ist nicht eingestürzt
|