Skip to content
Snippets Groups Projects
Commit 0b2b605b authored by Janik Zikovsky's avatar Janik Zikovsky
Browse files

Refs #4677: unit test for PointGroup and -31m fix

parent 26d748ad
No related branches found
No related tags found
No related merge requests found
......@@ -193,6 +193,7 @@ set ( TEST_FILES
test/ComponentParserTest.h
test/ComponentTest.h
test/ConeTest.h
test/ConventionalCellTest.h
test/ConvexPolygonTest.h
test/CylinderTest.h
test/DetectorGroupTest.h
......@@ -203,9 +204,6 @@ set ( TEST_FILES
test/IMDDimensionFactoryTest.h
test/IMDDimensionTest.h
test/IndexingUtilsTest.h
test/ReducedCellTest.h
test/ConventionalCellTest.h
test/ScalarUtilsTest.h
test/InstrumentDefinitionParserTest.h
test/InstrumentRayTracerTest.h
test/InstrumentTest.h
......@@ -217,8 +215,8 @@ set ( TEST_FILES
test/MDHistoDimensionBuilderTest.h
test/MDHistoDimensionTest.h
test/MDImplicitFunctionTest.h
test/MDPlaneImplicitFunctionTest.h
test/MDPlaneTest.h
test/MDPlaneImplicitFunctionTest.h
test/MapSupportTest.h
test/MaterialTest.h
test/MathSupportTest.h
......@@ -238,10 +236,12 @@ set ( TEST_FILES
test/ParameterMapTest.h
test/ParametrizedComponentTest.h
test/PlaneTest.h
test/PointGroupTest.h
test/PolygonEdgeTest.h
test/QuadrilateralTest.h
test/RectangularDetectorPixelTest.h
test/RectangularDetectorTest.h
test/ReducedCellTest.h
test/ReferenceFrameTest.h
test/ReflectionConditionTest.h
test/RotCounterTest.h
......@@ -252,6 +252,7 @@ set ( TEST_FILES
test/RulesSurfPointTest.h
test/RulesTest.h
test/RulesUnionTest.h
test/ScalarUtilsTest.h
test/ShapeFactoryTest.h
test/SphereTest.h
test/SurfaceFactoryTest.h
......
......@@ -134,7 +134,12 @@ namespace Geometry
virtual std::string getName() { return "-31m (Trigonal - Rhombohedral)"; }
/// Return true if the hkls are equivalent.
virtual bool isEquivalent(V3D hkl, V3D hkl2)
{ double h=hkl[0];double k=hkl[1];double l=hkl[2]; return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l)) || (hkl2 == V3D(k,h,-l)) || (hkl2 == V3D(h-k,-k,-l)) || (hkl2 == V3D(-h,-h+k,-l)) || (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l)) || (hkl2 == V3D(-k,-h,l)) || (hkl2 == V3D(-h+k,k,l)) || (hkl2 == V3D(h,h-k,l)); }
{ double h=hkl[0];double k=hkl[1];double l=hkl[2];
return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l))
|| (hkl2 == V3D(-k,-h,-l)) || (hkl2 == V3D(-h+k,k,-l)) || (hkl2 == V3D(h,h-k,-l))
|| (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l))
|| (hkl2 == V3D(k,h,l)) || (hkl2 == V3D(h-k,-k,l)) || (hkl2 == V3D(-h,-h+k,l));
}
};
//------------------------------------------------------------------------
......
#ifndef MANTID_GEOMETRY_POINTGROUPTEST_H_
#define MANTID_GEOMETRY_POINTGROUPTEST_H_
#include <cxxtest/TestSuite.h>
#include "MantidKernel/Timer.h"
#include "MantidKernel/Strings.h"
#include "MantidKernel/System.h"
#include <iostream>
#include <iomanip>
#include "MantidGeometry/Crystal/PointGroup.h"
#include "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stdarg.h"
using namespace Mantid;
using namespace Mantid::Geometry;
class PointGroupTest : public CxxTest::TestSuite
{
public:
void check_point_group(std::string name, V3D hkl, size_t numEquiv, V3D * equiv)
{
std::vector<PointGroup_sptr> pgs = getAllPointGroups();
for (size_t i=0; i<pgs.size(); i++)
{
if (pgs[i]->getName().substr(0, name.size()) == name)
{
for (size_t j=0; j<numEquiv; j++)
{
//std::cout << j << std::endl;
if (!pgs[i]->isEquivalent(hkl, equiv[j]))
{
TSM_ASSERT( name + " : " + hkl.toString() + " is not equivalent to " + equiv[j].toString(), false);
}
}
return;
}
}
TSM_ASSERT("Point group not found", false);
}
void test_all_point_groups()
{
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,-3)};
check_point_group("-1", V3D(1,2,3), 2, equiv); }
{ V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,-3), V3D(-1,2,-3), V3D(1,-2,3) };
check_point_group("1 2/m 1", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,3), V3D(-1,-2,-3), V3D(1,2,-3) };
check_point_group("1 1 2/m", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(1,-2,3), V3D(-1,2,3)};
check_point_group("mmm", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3)};
check_point_group("4/m", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(2,1,-3), V3D(-2,-1,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3), V3D(1,-2,3), V3D(-1,2,3),V3D(-2,-1,3), V3D(2,1,3)};
check_point_group("4/mmm", V3D(1,2,3), 16, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3), V3D(-1+2,-1,3), V3D(-1,-2,-3), V3D(2,-1+2,-3), V3D(1-2,1,-3)};
check_point_group("-3", V3D(1,2,3), 6, equiv); }
{ V3D equiv[] = {
V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),
V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3),
V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),
V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)};
check_point_group("-31m", V3D(1,2,3), 12, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3)};
check_point_group("-3m1", V3D(1,2,3), 12, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3)};
check_point_group("6/m", V3D(1,2,3), 12, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3),V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)};
check_point_group("6/mmm", V3D(1,2,3), 24, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1)};
check_point_group("m-3", V3D(1,2,3), 24, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(2,1,-3),V3D(-2,-1,-3),V3D(2,-1,3),V3D(-2,1,3),V3D(1,3,-2),V3D(-1,3,2),V3D(-1,-3,-2),V3D(1,-3,2),V3D(3,2,-1),V3D(3,-2,1),V3D(-3,2,1),V3D(-3,-2,-1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1),V3D(-2,-1,3),V3D(2,1,3),V3D(-2,1,-3),V3D(2,-1,-3),V3D(-1,-3,2),V3D(1,-3,-2),V3D(1,3,2),V3D(-1,3,-2),V3D(-3,-2,1),V3D(-3,2,-1),V3D(3,-2,-1),V3D(3,2,1)};
check_point_group("m-3m", V3D(1,2,3), 48, equiv); }
if (false)
{
{ V3D equiv[] = {V3D(1,2,3)};
check_point_group("1", V3D(1,2,3), 1, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,2,-3)};
check_point_group("2", V3D(1,2,3), 2, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(1,2,-3)};
check_point_group("m", V3D(1,2,3), 2, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),};
check_point_group("222", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(1,-2,3),V3D(-1,2,3),};
check_point_group("mm2", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),};
check_point_group("4", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3),};
check_point_group("-4", V3D(1,2,3), 4, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(-1,2,-3),V3D(1,-2,-3),V3D(2,1,-3),V3D(-2,-1,-3),};
check_point_group("422", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),};
check_point_group("4mm", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3), V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),};
check_point_group("4mm", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3), V3D(-1,2,-3),V3D(1,-2,-3),V3D(-2,-1,3),V3D(2,1,3),};
check_point_group("-42m", V3D(1,2,3), 8, equiv); }
{ V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3), V3D(1,-2,3),V3D(-1,2,3),V3D(2,1,-3),V3D(-2,-1,-3),};
check_point_group("-4m2", V3D(1,2,3), 8, equiv); }
}
}
};
#endif /* MANTID_GEOMETRY_POINTGROUPTEST_H_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment