102 lines
4.4 KiB
Python
102 lines
4.4 KiB
Python
import time
|
|
import pytest
|
|
import json
|
|
import sys
|
|
import igl
|
|
import numpy as np
|
|
sys.path.append('../')
|
|
sys.path.append('../src')
|
|
import json
|
|
from tracer_utils import intersection_event, find_edge_point,averaged_principal_curvatures, trace
|
|
from tracer_helper import Mesh
|
|
|
|
eps=1e-6
|
|
|
|
with open('test_data.json', 'r') as infile:
|
|
homework_data = json.load(infile)
|
|
|
|
@pytest.mark.timeout(0.5)
|
|
@pytest.mark.parametrize("data", homework_data[0])
|
|
def test_intersection_event(data):
|
|
ground_truth_t1, ground_truth_u1, ground_truth_E1, a1_orig, a1_dir, b1_orig, b1_dir, epsilon = data
|
|
a1_orig = np.array(a1_orig, dtype = float)
|
|
a1_dir = np.array(a1_dir, dtype = float)
|
|
b1_orig = np.array(b1_orig, dtype = float)
|
|
b1_dir = np.array(b1_dir, dtype = float)
|
|
student_t1, student_u1, student_E1 = intersection_event(a1_orig, a1_dir, b1_orig, b1_dir, epsilon)
|
|
if (ground_truth_t1 == None):
|
|
assert ground_truth_t1 == student_t1
|
|
assert ground_truth_u1 == student_u1
|
|
assert ground_truth_E1 == student_E1
|
|
else:
|
|
assert np.linalg.norm(ground_truth_t1 - student_t1) < eps
|
|
assert np.linalg.norm(ground_truth_u1 - student_u1) < eps
|
|
assert np.linalg.norm(ground_truth_E1 - student_E1) < eps
|
|
|
|
@pytest.mark.timeout(0.5)
|
|
def test_find_edge_point():
|
|
ground_truth_edge_point, ground_truth_is_boundary_point, v, f, a3_orig, a3_dir = homework_data[1]
|
|
ground_truth_edge_point = np.array(ground_truth_edge_point, dtype=float)
|
|
v = np.array(v, dtype=float)
|
|
f = np.array(f, dtype=int)
|
|
a3_orig = np.array(a3_orig, dtype=float)
|
|
a3_dir = np.array(a3_dir, dtype=float)
|
|
|
|
m = Mesh(v, f)
|
|
student_edge_point, student_is_boundary_point = find_edge_point(m, a3_orig, a3_dir)
|
|
assert np.linalg.norm(ground_truth_edge_point - student_edge_point) < eps
|
|
assert ground_truth_is_boundary_point == student_is_boundary_point
|
|
|
|
@pytest.mark.timeout(0.5)
|
|
def test_averaged_principal_curvatures():
|
|
ground_truth_k1,ground_truth_k2,ground_truth_v1,ground_truth_v2,ground_truth_n, a4_orig, v, f, num_neighbors, epsilon = homework_data[2]
|
|
ground_truth_k1 = np.array(ground_truth_k1, dtype=float)
|
|
ground_truth_k2 = np.array(ground_truth_k2, dtype=float)
|
|
ground_truth_v1 = np.array(ground_truth_v1, dtype=float)
|
|
ground_truth_v2 = np.array(ground_truth_v2, dtype=float)
|
|
ground_truth_n = np.array(ground_truth_n, dtype=float)
|
|
a4_orig = np.array(a4_orig, dtype=float)
|
|
v = np.array(v, dtype=float)
|
|
f = np.array(f, dtype=int)
|
|
m = Mesh(v, f)
|
|
|
|
student_k1,student_k2,student_v1,student_v2,student_n = averaged_principal_curvatures(a4_orig, m, num_neighbors, epsilon)
|
|
|
|
assert np.linalg.norm(ground_truth_k1 - student_k1) < eps
|
|
assert np.linalg.norm(ground_truth_k2 - student_k2) < eps
|
|
assert np.linalg.norm(ground_truth_v1 - student_v1) < eps
|
|
assert np.linalg.norm(ground_truth_v2 - student_v2) < eps
|
|
assert np.linalg.norm(ground_truth_n - student_n) < eps
|
|
|
|
@pytest.mark.timeout(0.5)
|
|
def test_trace_1():
|
|
ground_truth_P1, ground_truth_A1, ground_truth_PP1, vertex_idx, v, f, num_steps, epsilon, backward_trace, num_neighbors = homework_data[3]
|
|
ground_truth_P1 = np.array(ground_truth_P1, dtype=float)
|
|
ground_truth_A1 = np.array(ground_truth_A1, dtype=float)
|
|
ground_truth_PP1 = np.empty(ground_truth_PP1, dtype=float)
|
|
v = np.array(v, dtype=float)
|
|
f = np.array(f, dtype=int)
|
|
m = Mesh(v, f)
|
|
student_P1, student_A1, student_PP1 = trace(vertex_idx, m, num_steps, epsilon, True, backward_trace, num_neighbors)
|
|
|
|
assert np.linalg.norm(ground_truth_P1 - student_P1) < eps
|
|
assert np.linalg.norm(ground_truth_A1 - student_A1) < eps
|
|
assert np.linalg.norm(ground_truth_PP1 - student_PP1) < eps
|
|
|
|
|
|
@pytest.mark.timeout(0.5)
|
|
def test_trace_2():
|
|
ground_truth_P1, ground_truth_A1, ground_truth_PP1, vertex_idx, v, f, num_steps, epsilon, backward_trace, num_neighbors = homework_data[4]
|
|
ground_truth_P1 = np.array(ground_truth_P1, dtype=float)
|
|
ground_truth_A1 = np.array(ground_truth_A1, dtype=float)
|
|
ground_truth_PP1 = np.empty(ground_truth_PP1, dtype=float)
|
|
v = np.array(v, dtype=float)
|
|
f = np.array(f, dtype=int)
|
|
m = Mesh(v, f)
|
|
student_P1, student_A1, student_PP1 = trace(vertex_idx, m, num_steps, epsilon, False, backward_trace, num_neighbors)
|
|
assert np.linalg.norm(ground_truth_P1 - student_P1) < eps
|
|
assert np.linalg.norm(ground_truth_A1 - student_A1) < eps
|
|
assert np.linalg.norm(ground_truth_PP1 - student_PP1) < eps
|
|
|
|
|