Commit 6c0792d8 authored by JasonPries's avatar JasonPries
Browse files

More unified style of tests

Add .oesk extension for sketch output files
Add .oeme extension for mesh output files
Add build_gallery.py python script. Parses ./build/test/output directory for .oesk and .oeme files and saves images using matplotlib
parent 383473bc
import os
import numpy as np
import matplotlib.pyplot as plt
imgtypes = ['.pdf','.png']
def plot_sketch(fname):
print('Sketch: ' +fname)
data = np.genfromtxt(fname, dtype=float, delimiter=',')
plt.plot(data[:,0], data[:,1])
plt.grid(True)
plt.axes().set_aspect('equal','datalim')
for ext in imgtypes:
plt.savefig(fname+ext)
plt.clf()
def plot_mesh(fname):
print('Mesh: '+fname)
data = np.genfromtxt(fname, dtype=float, delimiter=',')
x = data[:,[0,1,2,0]].transpose()
y = data[:,[3,4,5,3]].transpose()
plt.plot(x,y,'b')
plt.grid(True)
plt.axes().set_aspect('equal','datalim')
for ext in imgtypes:
plt.savefig(fname+ext)
plt.clf()
root = os.getcwd()
root += '/build/test/output/'
for path, _, files in os.walk(root):
for name in files:
_, fext = os.path.splitext(name)
fpath = os.path.join(path, name)
if fext == '.oesk':
plot_sketch(fpath)
elif fext == '.oeme':
plot_mesh(fpath)
\ No newline at end of file
......@@ -739,7 +739,7 @@ void Mesh::save_as(std::string path, std::string file_name) const {
}
std::fstream fs;
fs.open(path + file_name, std::fstream::out);
fs.open(path + file_name + ".oeme", std::fstream::out);
for (size_t i = 0; i < Edges.size(); i++) {
const Point *v0 = Edges[i]->Node;
......
#ifndef OERSTED_UTIL_H
#define OERSTED_UTIL_H
#ifndef OERSTED_MESH_UTIL_H
#define OERSTED_MESH_UTIL_H
#include "Mesh.h"
......@@ -13,4 +13,4 @@ void element_quality(std::vector<Edge *> &triangles, std::vector<double> &radii,
void sort_permutation(std::vector<double> &value, std::vector<size_t> &index);
#endif //OERSTED_UTIL_H
#endif //OERSTED_MESH_UTIL_H
......@@ -87,7 +87,7 @@ void Sketch::save_as<SaveMethod::Rasterize>(std::string path, std::string file_n
}
std::fstream fs;
fs.open(path + file_name, std::fstream::out);
fs.open(path + file_name + ".oesk", std::fstream::out);
for (size_t i = 0; i < Curves.size(); ++i) {
if (!Curves[i]->ForConstruction) {
......
#include "test_Mesh.hpp"
TEST(MESH__CREATE, TRIANGLE_DOMAIN) {
TEST(Mesh, create__triangle_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(1.0, 0.0);
......@@ -17,7 +17,7 @@ TEST(MESH__CREATE, TRIANGLE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "triangle_domain.csv");
m.save_as(SAVE_DIR, "triangle_domain");
std::vector<size_t> vmap = map_verticies_to_points({v0, v1, v2}, m);
......@@ -84,7 +84,7 @@ TEST(MESH__CREATE, TRIANGLE_DOMAIN) {
forced_refinement(m, "triangle_domain_refine_loop", 7);
}
TEST(MESH__CREATE, SQUARE_DOMAIN) {
TEST(Mesh, create__square_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......@@ -103,7 +103,7 @@ TEST(MESH__CREATE, SQUARE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "square_domain.csv");
m.save_as(SAVE_DIR, "square_domain");
// Test number of verticies, edges, triangles
{
......@@ -165,7 +165,7 @@ TEST(MESH__CREATE, SQUARE_DOMAIN) {
forced_refinement(m, "square_domain_refine_loop", 7);
}
TEST(MESH__CREATE, NARROW_DIAMOND_DOMAIN) {
TEST(Mesh, create__narrow_diamond_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(1.0, 0.0);
......@@ -184,7 +184,7 @@ TEST(MESH__CREATE, NARROW_DIAMOND_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "narrow_diamond_domain.csv");
m.save_as(SAVE_DIR, "narrow_diamond_domain");
// Test number of verticies, edges, triangles
{
......@@ -240,7 +240,7 @@ TEST(MESH__CREATE, NARROW_DIAMOND_DOMAIN) {
}
}
TEST(MESH__CREATE, NARROW_RECTANGLE_DOMAIN) {
TEST(Mesh, create__narrow_rectangle_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(5.0, 0.0);
......@@ -261,7 +261,7 @@ TEST(MESH__CREATE, NARROW_RECTANGLE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "narrow_rectangle_domain.csv");
m.save_as(SAVE_DIR, "narrow_rectangle_domain");
// Test number of verticies, edges, triangles
{
......@@ -305,7 +305,7 @@ TEST(MESH__CREATE, NARROW_RECTANGLE_DOMAIN) {
}
}
TEST(MESH__CREATE, HALF_CIRCLE_DOMAIN) {
TEST(Mesh, create__half_circle_domain) {
Sketch s;
Vertex &vc = s.new_element<Vertex>(0.0, 0.0);
......@@ -321,7 +321,7 @@ TEST(MESH__CREATE, HALF_CIRCLE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "half_circle_domain.csv");
m.save_as(SAVE_DIR, "half_circle_domain");
// Test number of verticies, edges, triangles
{
......@@ -346,7 +346,7 @@ TEST(MESH__CREATE, HALF_CIRCLE_DOMAIN) {
}
}
TEST(MESH__CREATE, HORSESHOE_DOMAIN) {
TEST(Mesh, create__horseshoe_domain) {
Sketch s;
Vertex &vc = s.new_element<Vertex>(0.0, 0.0);
......@@ -366,10 +366,9 @@ TEST(MESH__CREATE, HORSESHOE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "horseshoe_domain.csv");
m.save_as(SAVE_DIR, "horseshoe_domain");
// Test triangles, possibly redundant
{
{ // Test triangles, possibly redundant
for (size_t i = 0; i < m.size_edges(); ++i) {
EXPECT_TRUE(m.edge(i)->next()->prev() == m.edge(i));
EXPECT_TRUE(m.edge(i)->next()->next()->prev()->prev() == m.edge(i));
......@@ -385,19 +384,14 @@ TEST(MESH__CREATE, HORSESHOE_DOMAIN) {
}
}
// Test validity, optimality
{
edges_are_valid(m);
edges_are_optimal(m);
}
edges_are_valid(m);
edges_are_optimal(m);
forced_refinement(m, "horseshoe_domain_refine_loop", 7);
// Forced Refinement
{
forced_refinement(m, "horseshoe_domain_refine_loop", 7);
}
}
TEST(MESH__CREATE, I_SHAPED_DOMAIN) {
TEST(Mesh, create__I_shaped_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......@@ -428,7 +422,7 @@ TEST(MESH__CREATE, I_SHAPED_DOMAIN) {
s.solve();
s.save_as<SaveMethod::Rasterize>(SAVE_DIR, "i_shaped_domain.csv");
s.save_as<SaveMethod::Rasterize>(SAVE_DIR, "i_shaped_domain");
s.build();
......@@ -438,9 +432,9 @@ TEST(MESH__CREATE, I_SHAPED_DOMAIN) {
m.create();
m.save_as(SAVE_DIR, "i_shaped_domain_mesh.csv");
m.save_as(SAVE_DIR, "i_shaped_domain_mesh");
// Test validitity, optimality
// Test validity, optimality
{
edges_are_valid(m);
edges_are_optimal(m);
......@@ -452,7 +446,7 @@ TEST(MESH__CREATE, I_SHAPED_DOMAIN) {
}
}
TEST(MESH__CREATE, CORNER_SQUARE_DOMAIN) {
TEST(Mesh, create__corner_square_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......@@ -479,7 +473,7 @@ TEST(MESH__CREATE, CORNER_SQUARE_DOMAIN) {
Mesh m{s};
m.create();
m.save_as(SAVE_DIR, "corner_square_domain.csv");
m.save_as(SAVE_DIR, "corner_square_domain");
// Test number of vertices, edges, triangles
{
......@@ -505,7 +499,7 @@ TEST(MESH__CREATE, CORNER_SQUARE_DOMAIN) {
}
}
TEST(MESH__CREATE, SQUARE_IN_SQUARE_DOMAIN) {
TEST(Mesh, create__square_in_square_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......@@ -531,7 +525,7 @@ TEST(MESH__CREATE, SQUARE_IN_SQUARE_DOMAIN) {
s.solve();
s.build();
s.save_as<SaveMethod::Rasterize>(SAVE_DIR, "square_in_square_domain.csv");
s.save_as<SaveMethod::Rasterize>(SAVE_DIR, "square_in_square_domain");
Mesh m{s};
m.MaximumElementSize = 0.1;
......@@ -540,17 +534,17 @@ TEST(MESH__CREATE, SQUARE_IN_SQUARE_DOMAIN) {
m.create();
m.save_as(SAVE_DIR, "square_in_square_domain_mesh.csv");
m.save_as(SAVE_DIR, "square_in_square_domain_mesh");
edges_are_valid(m);
edges_are_optimal(m);
m.refine();
m.save_as(SAVE_DIR, "square_in_square_domain_mesh_refine.csv");
m.save_as(SAVE_DIR, "square_in_square_domain_mesh_refine");
}
TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_TRUE) {
TEST(Edge, are_intersecting__nonparallel_true) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.0, 1.0};
......@@ -566,7 +560,7 @@ TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_TRUE) {
EXPECT_TRUE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE) {
TEST(Edge, are_intersecting__nonparallel_false) {
Point v0{1.1, 1.1};
Point v1{2.0, 2.0};
Point v2{0.0, 1.0};
......@@ -582,7 +576,7 @@ TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE_SHARED_VERTEX_CORNER_CASE) {
TEST(Edge, are_intersecting__nonparallel_false_shared_vertex) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.0, 2.0};
......@@ -597,7 +591,7 @@ TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE_SHARED_VERTEX_CORNER_CASE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE_COINCIDENT_VERTEX_CORNER_CASE) {
TEST(Edge, are_intersecting__nonparallel_false_coincident_vertex) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.0, 1.0};
......@@ -613,7 +607,7 @@ TEST(EDGE__ARE_INTERSECTING, NONPARALLEL_FALSE_COINCIDENT_VERTEX_CORNER_CASE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, PARALLLEL_SHADED_FALSE) {
TEST(Edge, are_intersecting__parallel_shaded_false) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.0, 0.5};
......@@ -629,7 +623,7 @@ TEST(EDGE__ARE_INTERSECTING, PARALLLEL_SHADED_FALSE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, PARALLEL_NONSHADED_FALSE) {
TEST(Edge, are_intersecting__parallel_nonshaded_false) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.0, 1.5};
......@@ -645,7 +639,7 @@ TEST(EDGE__ARE_INTERSECTING, PARALLEL_NONSHADED_FALSE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, COLINEAR_TRUE) {
TEST(Edge, are_intersecting__colinear_true) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{0.5, 0.5};
......@@ -661,7 +655,7 @@ TEST(EDGE__ARE_INTERSECTING, COLINEAR_TRUE) {
EXPECT_TRUE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, COLINEAR_FALSE) {
TEST(Edge, are_intersecting__colinear_false) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{1.5, 1.5};
......@@ -677,7 +671,7 @@ TEST(EDGE__ARE_INTERSECTING, COLINEAR_FALSE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(EDGE__ARE_INTERSECTING, COLINEAR_FALSE_SHARED_VERTEX_CORNER_CASE) {
TEST(Edge, are_intersecting__colinear_false_shared_vertex) {
Point v0{0.0, 0.0};
Point v1{1.0, 1.0};
Point v2{2.0, 2.0};
......@@ -692,7 +686,7 @@ TEST(EDGE__ARE_INTERSECTING, COLINEAR_FALSE_SHARED_VERTEX_CORNER_CASE) {
EXPECT_FALSE(are_intersecting(&e0, &e2));
}
TEST(MESH__LOCATE_TRIANGLE, TRIANGULAR_DOMAIN) {
TEST(Mesh, locate_triangle__triangular_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......@@ -769,7 +763,7 @@ TEST(MESH__LOCATE_TRIANGLE, TRIANGULAR_DOMAIN) {
}
}
TEST(MESH__LOCATE_TRIANGLE, SQUARE_DOMAIN) {
TEST(Mesh, locate_triange__square_domain) {
Sketch s;
Vertex &v0 = s.new_element<Vertex>(0.0, 0.0);
......
......@@ -51,7 +51,7 @@ bool edges_are_valid(Mesh &m) {
return true;
}
void forced_refinement(Mesh &m, std::string file_name, size_t num_refines) {
void forced_refinement(Mesh &m, string file_name, size_t num_refines) {
double minq = m.MinimumElementQuality;
double mine = m.MinimumElementSize;
double maxe = m.MaximumElementSize;
......@@ -64,13 +64,10 @@ void forced_refinement(Mesh &m, std::string file_name, size_t num_refines) {
try {
m.refine_once();
}
catch (const std::exception except) {
catch (const exception except) {
throw;
}
std::stringstream name;
name << file_name << i << ".csv";
m.save_as(SAVE_DIR, name.str());
m.save_as(SAVE_DIR, file_name + "_" + to_string(i));
edges_are_valid(m);
edges_are_optimal(m);
......@@ -81,8 +78,8 @@ void forced_refinement(Mesh &m, std::string file_name, size_t num_refines) {
m.MaximumElementSize = maxe;
}
std::vector<size_t> map_verticies_to_points(std::vector<Vertex> verts, Mesh m) {
std::vector<size_t> index;
vector<size_t> map_verticies_to_points(vector<Vertex> verts, Mesh m) {
vector<size_t> index;
index.reserve(verts.size());
for (size_t i = 0;i != verts.size();++i) {
......@@ -95,7 +92,7 @@ std::vector<size_t> map_verticies_to_points(std::vector<Vertex> verts, Mesh m) {
}
}
return std::move(index);
return move(index);
}
#endif //OERSTED_TEST_MESH_HPP
......@@ -2,7 +2,7 @@
#include <tgmath.h>
#include "test_Sketch.hpp"
TEST(CIRCULARARC, CONSTRUCTOR) {
TEST(CircularArc, constructor) {
{ //ARGS::()
EXPECT_NO_THROW(CircularArc c);
}
......@@ -13,7 +13,7 @@ TEST(CIRCULARARC, CONSTRUCTOR) {
}
}
TEST(CIRCULARARC, METHOD_point) {
TEST(CircularArc, point) {
{
double r = 1.0;
double a0 = -M_PI_2;
......@@ -55,7 +55,7 @@ TEST(CIRCULARARC, METHOD_point) {
}
}
TEST(CIRCULARARC, METHOD_tangent) {
TEST(CircularArc, tangent) {
{
double r = 1.0;
double a0 = -M_PI_2;
......@@ -105,7 +105,7 @@ TEST(CIRCULARARC, METHOD_tangent) {
}
}
TEST(CIRCULARARC, METHOD_a) {
TEST(CircularArc, a) {
{
double r = 1.0;
double a0 = -M_PI_2;
......@@ -171,7 +171,7 @@ TEST(CIRCULARARC, METHOD_a) {
}
}
TEST(CIRCULARARC, METHOD_da) {
TEST(CircularArc, da) {
{
double r = 1.0;
double a0 = -M_PI_2;
......@@ -217,7 +217,7 @@ TEST(CIRCULARARC, METHOD_da) {
}
}
TEST(CIRCULARARC, METHOD_on_manifold) {
TEST(CircularArc, on_manifold) {
{ //ARGS::(Vertex)
Sketch s;
......@@ -282,7 +282,7 @@ TEST(CIRCULARARC, METHOD_on_manifold) {
}
}
TEST(CIRCULARARC, METHOD_on_segment) {
TEST(CircularARc, on_segment) {
{ //ARGS::(Vertex)
Sketch s;
......@@ -356,7 +356,7 @@ TEST(CIRCULARARC, METHOD_on_segment) {
}
}
TEST(CIRCULARARC, METHOD_is_identical) {
TEST(CircularArc, is_identical) {
{ //ARGS::(Vertex)
Sketch s;
......@@ -443,7 +443,7 @@ TEST(CIRCULARARC, METHOD_is_identical) {
}
}
TEST(CIRCULARARC, METHOD_is_coincident) {
TEST(CircularArc, is_coincident) {
{ // ARGS::(CircularArc)
Sketch s;
......@@ -482,23 +482,25 @@ TEST(CIRCULARARC, METHOD_is_coincident) {
}
}
TEST(CIRCULARARC, METHOD_split) {
Vertex v0{1.0, 0.0};
Vertex v1{0.0, 1.0};
Vertex vc{0.0, 0.0};
TEST(CircularArc, split) {
{
Vertex v0{1.0, 0.0};
Vertex v1{0.0, 1.0};
Vertex vc{0.0, 0.0};
CircularArc c0{v0, v1, vc, 1.0};
CircularArc c0{v0, v1, vc, 1.0};
Vertex *vs = new Vertex;
Vertex *vs = new Vertex;
Curve *c1 = c0.split(vs, 0.5);
Curve *c1 = c0.split(vs, 0.5);
EXPECT_NEAR(M_SQRT1_2, vs->x(), TOL);
EXPECT_NEAR(M_SQRT1_2, vs->y(), TOL);
EXPECT_NEAR(M_SQRT1_2, vs->x(), TOL);
EXPECT_NEAR(M_SQRT1_2, vs->y(), TOL);
EXPECT_TRUE(c0.start() == &v0);
EXPECT_TRUE(c0.end() == vs);
EXPECT_TRUE(c0.start() == &v0);
EXPECT_TRUE(c0.end() == vs);
EXPECT_TRUE(c1->start() == vs);
EXPECT_TRUE(c1->end() == &v1);
EXPECT_TRUE(c1->start() == vs);
EXPECT_TRUE(c1->end() == &v1);
}
}
\ No newline at end of file
This diff is collapsed.
#include "test_Sketch.hpp"
TEST(CONTOUR, CCW_TRIANGLE) {
TEST(Contour, Triangle_CCW) {
Vertex v0{1.0, 0.0};
Vertex v1{1.0, 1.0};
Vertex v2{0.0, 1.0};
......@@ -9,7 +9,7 @@ TEST(CONTOUR, CCW_TRIANGLE) {
LineSegment l1{v1, v2};
LineSegment l2{v2, v0};
std::vector<const Curve *> vc(3);
vector<const Curve *> vc(3);
vc[0] = &l0;
vc[1] = &l1;
vc[2] = &l2;
......@@ -27,7 +27,7 @@ TEST(CONTOUR, CCW_TRIANGLE) {
EXPECT_TRUE(cont == cont);
}
TEST(CONTOUR, CW_TRIANGLE) {
TEST(Contour, Triangle_CW) {
Vertex v0{1.0, 0.0};
Vertex v1{1.0, 1.0};
Vertex v2{0.0, 1.0};
......@@ -36,7 +36,7 @@ TEST(CONTOUR, CW_TRIANGLE) {
LineSegment l1{v2, v1};
LineSegment l2{v0, v2};
std::vector<const Curve *> vc(3);
vector<const Curve *> vc(3);
vc[0] = &l0;
vc[1] = &l1;
vc[2] = &l2;
......@@ -54,7 +54,7 @@ TEST(CONTOUR, CW_TRIANGLE) {
EXPECT_TRUE(cont == cont);
}
TEST(CONTOUR, RANDOM_TRIANGLE) {
TEST(Contour, Triangle) {
Vertex v0{1.0, 0.0};
Vertex v1{1.0, 1.0};
Vertex v2{0.0, 1.0};
......@@ -63,7 +63,7 @@ TEST(CONTOUR, RANDOM_TRIANGLE) {
LineSegment l1{v1, v2};
LineSegment l2{v2, v0};
std::vector<const Curve *> vc(3);
vector<const Curve *> vc(3);
vc[0] = &l2;
vc[1] = &l0;
vc[2] = &l1;
......@@ -81,17 +81,17 @@ TEST(CONTOUR, RANDOM_TRIANGLE) {
EXPECT_TRUE(cont == cont);
}
TEST(CONTOUR, NONCLOSED_FAILURE) {
TEST(Contour, Nonclosed_Failure) {
Vertex v0{0.0, 0.0};
Vertex v1{1.0, 1.0};
LineSegment l0{v0, v1};
std::vector<const Curve *> c(1);
vector<const Curve *> c(1);
c[0] = &l0;
EXPECT_ANY_THROW(Contour cont{c}); // Construction should fail since the contour is not closed
}
TEST(CONTOUR, DISJOINT_FAILURE) {
TEST(Contour, Disjoint_Failure) {
Vertex v0{0.0, 0.0};
Vertex v1{1.0, 1.0};
Vertex v2{0.0, 1.0};
......@@ -106,7 +106,7 @@ TEST(CONTOUR, DISJOINT_FAILURE) {
LineSegment l4{v4, v5};
LineSegment l5{v5, v3};
std::vector<const Curve *> c(6);
vector<const Curve *> c(6);
c[0] = &l0;
c[1] = &l1;
c[2] = &l2;
......@@ -117,7 +117,7 @@ TEST(CONTOUR, DISJOINT_FAILURE) {
EXPECT_ANY_THROW(Contour cont{c}); // Construction should fail since contour is not simple
}
TEST(CONTOUR, IMPLICIT_SELF_INTERSECTION_FAILURE) {
TEST(Contour, Implicit_Self_Intersection_Failure) {
Vertex v0{1.0, 1.0};
Vertex v1{-1.0, -1.0};
Vertex v2{-1.0, 1.0};
......@@ -127,7 +127,7 @@ TEST(CONTOUR, IMPLICIT_SELF_INTERSECTION_FAILURE) {
LineSegment l2{v2, v3};
LineSegment l3{v3, v0};
std::vector<const Curve *> c(4);
vector<const Curve *> c(4);
c[0] = &l0;
c[1] = &l1;
c[2] = &l2;
......@@ -141,7 +141,7 @@ TEST(CONTOUR, IMPLICIT_SELF_INTERSECTION_FAILURE) {
*/
}