Skip to content
Snippets Groups Projects
HKLGeneratorTest.h 2.81 KiB
Newer Older
#ifndef MANTID_GEOMETRY_HKLGENERATORTEST_H_
#define MANTID_GEOMETRY_HKLGENERATORTEST_H_

#include <cxxtest/TestSuite.h>
#include "MantidGeometry/Crystal/HKLGenerator.h"

using namespace Mantid::Geometry;
using namespace Mantid::Kernel;

class HKLGeneratorTest : public CxxTest::TestSuite {
public:
  // This pair of boilerplate methods prevent the suite being created statically
  // This means the constructor isn't called when running other tests
  static HKLGeneratorTest *createSuite() { return new HKLGeneratorTest(); }
  static void destroySuite(HKLGeneratorTest *suite) { delete suite; }

  void test_HKLGeneratorReturnsCorrectSizeSymmetricInt() {
    HKLGenerator gen(2, 2, 2);

    TS_ASSERT_EQUALS(gen.size(), 125);
  }

  void test_HKLGeneratorReturnsCorrectSizeSymmetricV3D() {
    HKLGenerator gen(V3D(2, 2, 2));

    TS_ASSERT_EQUALS(gen.size(), 125);
  }

  void test_HKLGeneratorReturnsCorrectSizeAsymmetricV3D() {
    HKLGenerator gen(V3D(-2, -1, -5), V3D(3, 4, -2));

    TS_ASSERT_EQUALS(gen.size(), 144);
  }

  void test_HKLGeneratorReturnsCorrectSizeOne() {
    HKLGenerator gen(V3D(-2, -1, -5), V3D(-2, -1, -5));
    TS_ASSERT_EQUALS(gen.size(), 1);
  }

  void test_beginIterator() {
    HKLGenerator gen(V3D(-2, -2, -3), V3D(1, 1, 0));

    HKLGenerator::const_iterator it = gen.begin();
    TS_ASSERT_EQUALS(*it, V3D(-2, -2, -3));
  }

  void test_endIterator() {
    HKLGenerator gen(V3D(-2, -2, -3), V3D(1, 1, 0));

    HKLGenerator::const_iterator it = gen.end();
    TS_ASSERT_EQUALS(*it, V3D(2, -2, -3));
  }

  void test_iterator_dereference() {
    HKLGenerator::const_iterator it;
    TS_ASSERT_EQUALS(*it, V3D(0, 0, 0));
  }
  void test_comparison() {
    HKLGenerator::const_iterator it1(V3D(-2, -3, 1));
    HKLGenerator::const_iterator it2(V3D(-2, -3, 1));
    HKLGenerator::const_iterator it3(V3D(-2, -3, 0));
    TS_ASSERT_EQUALS(it1, it2);
    TS_ASSERT_DIFFERS(it1, it3);
  }
  void test_iterator_increment() {
    HKLGenerator::const_iterator defaultIterator;
    TS_ASSERT_THROWS_NOTHING(++defaultIterator);
  }

  void test_iterator_dereference_range() {
    HKLGenerator::const_iterator it(V3D(-1, -1, -1), V3D(1, 1, 1));
    TS_ASSERT_EQUALS(*it, V3D(-1, -1, -1));
    ++it;
    TS_ASSERT_EQUALS(*it, V3D(-1, -1, 0));
  }

  void test_hkl_range() {
    HKLGenerator::const_iterator it(V3D(-1, -1, -1), V3D(1, 1, 1));
    HKLGenerator::const_iterator end(V3D(2, -1, -1));

    std::vector<V3D> hkls;
    std::copy(it, end, std::back_inserter(hkls));

    TS_ASSERT_EQUALS(hkls.size(), 27);
    TS_ASSERT_EQUALS(hkls[0], V3D(-1, -1, -1));
    TS_ASSERT_EQUALS(hkls[1], V3D(-1, -1, 0));
    TS_ASSERT_EQUALS(hkls[2], V3D(-1, -1, 1));
    TS_ASSERT_EQUALS(hkls[3], V3D(-1, 0, -1));
    TS_ASSERT_EQUALS(hkls[26], V3D(1, 1, 1));

    TS_ASSERT_EQUALS(std::distance(it, end), 27);
  }
};

#endif /* MANTID_GEOMETRY_HKLGENERATORTEST_H_ */