summaryrefslogtreecommitdiff
path: root/src/Coxeter_triangulation/test/perm_rep_test.cpp
blob: f2cdbce1f9f346267f476bb6a500c87df52f6305 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/*    This file is part of the Gudhi Library. The Gudhi library
 *    (Geometric Understanding in Higher Dimensions) is a generic C++
 *    library for computational topology.
 *
 *    Author(s):       Siargey Kachanovich
 *
 *    Copyright (C) 2019 Inria
 *
 *    Modification(s):
 *      - YYYY/MM Author: Description of the modification
 */

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "permutahedral_representation"
#include <boost/test/unit_test.hpp>

#include <gudhi/Permutahedral_representation.h>

BOOST_AUTO_TEST_CASE(permutahedral_representation) {
  typedef std::vector<int> Vertex;
  typedef std::vector<std::size_t> Part;
  typedef std::vector<Part> Partition;
  typedef Gudhi::coxeter_triangulation::Permutahedral_representation<Vertex, Partition> Simplex_handle;
  Vertex v0(10, 0);
  Partition omega = {Part({5}), Part({2}), Part({3,7}), Part({4,9}), Part({0,6,8}), Part({1,10})};
  Simplex_handle s(v0, omega);

  // Dimension check
  BOOST_CHECK(s.dimension() == 5);

  // Vertex number check
  std::vector<Vertex> vertices;
  for (auto& v: s.vertex_range())
    vertices.push_back(v);
  BOOST_CHECK(vertices.size() == 6);
  
  // Facet number check
  std::vector<Simplex_handle> facets;
  for (auto& f: s.facet_range())
    facets.push_back(f);
  BOOST_CHECK(facets.size() == 6);

  // Face of dim 3 number check
  std::vector<Simplex_handle> faces3;
  for (auto& f: s.face_range(3))
    faces3.push_back(f);
  BOOST_CHECK(faces3.size() == 15);

  // Cofacet number check
  std::vector<Simplex_handle> cofacets;
  for (auto& f: s.cofacet_range())
    cofacets.push_back(f);
  BOOST_CHECK(cofacets.size() == 12);

  // Is face check
  Vertex v1(10, 0);
  Partition omega1 = {Part({5}), Part({0,1,2,3,4,6,7,8,9,10})};
  Simplex_handle s1(v1, omega1);
  Vertex v2(10, 0); v2[1] = -1;
  Partition omega2 = {Part({1}), Part({5}), Part({2}), Part({3,7}), Part({4,9}), Part({0,6,8}), Part({10})};
  Simplex_handle s2(v2, omega2);
  BOOST_CHECK(s.is_face_of(s));
  BOOST_CHECK(s1.is_face_of(s));
  BOOST_CHECK(!s2.is_face_of(s));
  BOOST_CHECK(s.is_face_of(s2));
}