Test non-abelian groups with permutation group

release/4.3a0
dellaert 2015-05-24 10:25:42 -07:00
parent f335e70196
commit 379e0c6ede
1 changed files with 78 additions and 0 deletions

View File

@ -0,0 +1,78 @@
/* ----------------------------------------------------------------------------
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
* Atlanta, Georgia 30332-0415
* All Rights Reserved
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
* See LICENSE for the license information
* -------------------------------------------------------------------------- */
/**
* @file testGroup.cpp
* @brief Unit tests for groups
* @author Frank Dellaert
**/
#include <gtsam/base/Group.h>
#include <Eigen/Core>
#include <iostream>
namespace gtsam {
template<int N>
class Permutation: public Eigen::PermutationMatrix<N> {
public:
Permutation() {
Eigen::PermutationMatrix<N>::setIdentity();
}
Permutation(const Eigen::PermutationMatrix<N>& P) :
Eigen::PermutationMatrix<N>(P) {
}
Permutation inverse() const {
return Eigen::PermutationMatrix<N>(Eigen::PermutationMatrix<N>::inverse());
}
};
/// Define permutation group traits to be a model of the Multiplicative Group concept
template<int N>
struct traits<Permutation<N> > : internal::MultiplicativeGroupTraits<
Permutation<N> > {
static void Print(const Permutation<N>& m, const std::string& str = "") {
std::cout << m << std::endl;
}
static bool Equals(const Permutation<N>& m1, const Permutation<N>& m2,
double tol = 1e-8) {
return m1.indices() == m2.indices();
}
};
} // namespace gtsam
#include <gtsam/base/Testable.h>
#include <CppUnitLite/TestHarness.h>
using namespace std;
using namespace gtsam;
typedef Permutation<3> G; // Let's use the permutation group of order 3
//******************************************************************************
TEST(Group, Concept) {
BOOST_CONCEPT_ASSERT((IsGroup<G>));
}
//******************************************************************************
TEST(Group , Invariants) {
G g, h;
EXPECT(check_group_invariants(g, h));
}
//******************************************************************************
int main() {
TestResult tr;
return TestRegistry::runAllTests(tr);
}
//******************************************************************************