From 595442126488f97669aa48e3636a1fd5eafbb93f Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Fri, 10 Aug 2018 12:23:34 +0200
Subject: [PATCH] Add unit test for ItemType

- cosmetic fix for itemId in 3d (face <-> edge)
---
 src/mesh/ItemType.hpp   | 10 ++++-----
 tests/CMakeLists.txt    |  1 +
 tests/test_ItemType.cpp | 48 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+), 5 deletions(-)
 create mode 100644 tests/test_ItemType.cpp

diff --git a/src/mesh/ItemType.hpp b/src/mesh/ItemType.hpp
index 1e344f910..d37c02fae 100644
--- a/src/mesh/ItemType.hpp
+++ b/src/mesh/ItemType.hpp
@@ -51,8 +51,8 @@ struct ItemId<1>
         i=0;
         break;
       }
-      case ItemType::face:
       case ItemType::edge:
+      case ItemType::face:
       case ItemType::node: {
         // in 1d, faces, edges and nodes are the same
         i=1;
@@ -73,8 +73,8 @@ struct ItemId<2>
         i=0;
         break;
       }
-      case ItemType::face:
-      case ItemType::edge: {
+      case ItemType::edge:
+      case ItemType::face: {
         // in 2d, faces and edges are the same
         i=1;
         break;
@@ -98,11 +98,11 @@ struct ItemId<3>
         i=0;
         break;
       }
-      case ItemType::face: {
+      case ItemType::edge: {
         i=1;
         break;
       }
-      case ItemType::edge: {
+      case ItemType::face: {
         i=2;
         break;
       }
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 2c1ac56dc..3b4823f1e 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -4,6 +4,7 @@ set(EXECUTABLE_OUTPUT_PATH ${PASTIS_BINARY_DIR})
 
 add_executable (unit_tests
   test_main.cpp
+  test_ItemType.cpp
   test_PastisAssert.cpp
   test_RevisionInfo.cpp
   test_TinyMatrix.cpp
diff --git a/tests/test_ItemType.cpp b/tests/test_ItemType.cpp
new file mode 100644
index 000000000..7c3996361
--- /dev/null
+++ b/tests/test_ItemType.cpp
@@ -0,0 +1,48 @@
+#include <catch.hpp>
+
+#include <ItemType.hpp>
+
+TEST_CASE("ItemType", "[connectivity]") {
+
+  ItemType node_type = ItemType::node;
+  ItemType edge_type = ItemType::edge;
+  ItemType face_type = ItemType::face;
+  ItemType cell_type = ItemType::cell;
+
+  SECTION("checking for item type differences") {
+    REQUIRE(((node_type != edge_type) and
+             (node_type != face_type) and
+             (node_type != cell_type) and
+             (edge_type != face_type) and
+             (edge_type != cell_type) and
+             (face_type != cell_type)));
+  }
+
+  SECTION("checking for item type names") {
+    REQUIRE(itemName(node_type)=="node");
+    REQUIRE(itemName(edge_type)=="edge");
+    REQUIRE(itemName(face_type)=="face");
+    REQUIRE(itemName(cell_type)=="cell");
+  }
+
+  SECTION("checking for item ids in 1d") {
+    REQUIRE(ItemId<1>::itemId(cell_type)==0);
+    REQUIRE(ItemId<1>::itemId(edge_type)==1);
+    REQUIRE(ItemId<1>::itemId(face_type)==1);
+    REQUIRE(ItemId<1>::itemId(node_type)==1);
+  }
+
+  SECTION("checking for item ids in 2d") {
+    REQUIRE(ItemId<2>::itemId(cell_type)==0);
+    REQUIRE(ItemId<2>::itemId(edge_type)==1);
+    REQUIRE(ItemId<2>::itemId(face_type)==1);
+    REQUIRE(ItemId<2>::itemId(node_type)==2);
+  }
+
+  SECTION("checking for item ids in 3d") {
+    REQUIRE(ItemId<3>::itemId(cell_type)==0);
+    REQUIRE(ItemId<3>::itemId(edge_type)==1);
+    REQUIRE(ItemId<3>::itemId(face_type)==2);
+    REQUIRE(ItemId<3>::itemId(node_type)==3);
+  }
+}
-- 
GitLab