Files
tono/tests/node_tests/terrace_fit.py
2026-04-03 23:11:52 -07:00

61 lines
1.7 KiB
Python

import numpy as np
import pytest
from tests.node_tests._shared import make_field
def test_terrace_fit_stepped_surface():
from backend.nodes.terrace_fit import TerraceFit
node = TerraceFit()
# Create a surface with 3 clear terraces
data = np.zeros((64, 64))
data[:20, :] = 0.0
data[20:40, :] = 1.0
data[40:, :] = 2.0
field = make_field(data=data)
result, records = node.process(field, 3, 1.0, 0, "residual")
assert result.data.shape == (64, 64)
assert isinstance(records, list)
assert len(records) >= 3 # at least terrace heights
def test_terrace_fit_auto_detect():
from backend.nodes.terrace_fit import TerraceFit
node = TerraceFit()
data = np.zeros((64, 64))
data[:32, :] = 0.0
data[32:, :] = 5.0
field = make_field(data=data)
result, records = node.process(field, 0, 1.0, 0, "fitted")
assert result.data.shape == (64, 64)
def test_terrace_fit_labels_output():
from backend.nodes.terrace_fit import TerraceFit
node = TerraceFit()
data = np.zeros((32, 32))
data[:16, :] = 1.0
data[16:, :] = 3.0
field = make_field(data=data)
result, records = node.process(field, 2, 1.0, 0, "labels")
assert result.data.shape == (32, 32)
# Labels should have exactly 2 distinct values
unique = np.unique(result.data)
assert len(unique) == 2
def test_terrace_fit_step_heights_reported():
from backend.nodes.terrace_fit import TerraceFit
node = TerraceFit()
data = np.zeros((64, 64))
data[:32, :] = 0.0
data[32:, :] = 2.5
field = make_field(data=data)
_, records = node.process(field, 2, 1.0, 0, "residual")
# Should report step height
step_records = [r for r in records if "Step" in r["quantity"]]
assert len(step_records) >= 1