Files
rdkit/Code/Geometry/catch_tests.cpp
Greg Landrum df72c241c5 Improve test coverage and some bug fixes (#4536)
* test getIdOfEntryWithBitId()

* remove unused functions

* improve bv tests in python wrapper

* more UniformGrid tests

* improve deprotect coverage

* improve abbreviations coverage

* add operator!= to DeprotectData

* more testing for adjustQueryProperties

* fix a copy-paste bug

* copy-paste bug

* more testing

* more testing

* more testing

* fix an edge case bug in getValenceContrib

* more bond tests

* add operator!= to StereoInfo
tests StereoInfo::operator==

* make some internal functions testable

* more testing

* minor code cleanup

* fix some bad caching behavior in getDistanceMat() and get3DDistanceMat()

testing

* test FixeMolSizeMolBundle() copy ctor

* deprecate BalabanJ

* more testing

* testing

* mods to get things working for windows DLL builds
(don't bother running some of the tests there)

* fix a typo
2021-09-26 07:45:06 +02:00

147 lines
4.7 KiB
C++

//
// Copyright (C) 2019-2021 Greg Landrum and other RDKit contributors
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do
// this in one cpp file
#include "catch.hpp"
#include <Geometry/point.h>
#include <Geometry/UniformGrid3D.h>
TEST_CASE("construct Point2D from Point3D", "[point]") {
SECTION("basics") {
RDGeom::Point3D p3(1., 2., 3.);
RDGeom::Point2D p2(p3);
CHECK(p2.x == p3.x);
CHECK(p2.y == p3.y);
}
}
TEST_CASE("UniformGrid getGridIndex") {
RDGeom::UniformGrid3D grd(6.0, 5.0, 4.0);
CHECK(grd.getSize() == 960);
CHECK(grd.getNumX() == 12);
CHECK(grd.getNumY() == 10);
CHECK(grd.getNumZ() == 8);
CHECK(grd.getGridIndex(12, 1, 1) == -1);
CHECK(grd.getGridIndex(1, 10, 1) == -1);
CHECK(grd.getGridIndex(1, 1, 8) == -1);
CHECK(grd.getGridIndex(100, 1, 1) == -1);
CHECK(grd.getGridIndex(1, 100, 1) == -1);
CHECK(grd.getGridIndex(1, 1, 100) == -1);
unsigned int x, y, z;
CHECK_THROWS_AS(grd.getGridIndices(960, x, y, z), IndexErrorException);
CHECK_THROWS_AS(grd.getGridPointLoc(960), IndexErrorException);
}
TEST_CASE("UniformGrid copying") {
RDGeom::UniformGrid3D grd(6.0, 5.0, 4.0);
grd.setSphereOccupancy(RDGeom::Point3D(0.0, 0.0, 0.0), 1.5, 0.25);
CHECK(grd.getOccupancyVect()->getTotalVal() == 523);
SECTION("operator=") {
RDGeom::UniformGrid3D grd2(3, 3, 3);
grd2 = grd;
CHECK(grd2.getSize() == grd.getSize());
CHECK(grd2.getOccupancyVect()->getTotalVal() ==
grd.getOccupancyVect()->getTotalVal());
}
SECTION("char * ctor") {
auto pkl = grd.toString();
RDGeom::UniformGrid3D grd2(pkl.c_str(), pkl.size());
CHECK(grd2.getSize() == grd.getSize());
CHECK(grd2.getOccupancyVect()->getTotalVal() ==
grd.getOccupancyVect()->getTotalVal());
}
}
TEST_CASE("UniformGrid get/setVal") {
RDGeom::UniformGrid3D grd(6.0, 5.0, 4.0);
SECTION("getVal()") {
{
RDGeom::Point3D pt(1, 0, 0);
CHECK(grd.getGridPointIndex(pt) >= 0);
CHECK(grd.getVal(pt) == 0);
}
{
RDGeom::Point3D pt(10, 0, 0);
CHECK(grd.getGridPointIndex(pt) == -1);
CHECK(grd.getVal(pt) == -1);
}
{
RDGeom::Point3D pt(0, 10, 0);
CHECK(grd.getGridPointIndex(pt) == -1);
CHECK(grd.getVal(pt) == -1);
}
{
RDGeom::Point3D pt(0, 0, 10);
CHECK(grd.getGridPointIndex(pt) == -1);
CHECK(grd.getVal(pt) == -1);
}
}
SECTION("setVal") {
CHECK(grd.getOccupancyVect()->getTotalVal() == 0);
grd.setVal(RDGeom::Point3D(1, 0, 0), 2);
CHECK(grd.getOccupancyVect()->getTotalVal() == 2);
// not on the grid, has no impact
grd.setVal(RDGeom::Point3D(10, 0, 0), 2);
CHECK(grd.getOccupancyVect()->getTotalVal() == 2);
grd.setVal(3, 1);
CHECK(grd.getOccupancyVect()->getTotalVal() == 3);
// not on the grid
CHECK_THROWS_AS(grd.setVal(grd.getSize() + 1, 1), IndexErrorException);
CHECK(grd.getOccupancyVect()->getTotalVal() == 3);
// value too large
CHECK_THROWS_AS(grd.setVal(5, 8), ValueErrorException);
CHECK(grd.getOccupancyVect()->getTotalVal() == 3);
}
SECTION("setSphereOccupancy out of range") {
grd.setSphereOccupancy(RDGeom::Point3D(10.0, 0.0, 0.0), 1.5, 0.25);
CHECK(grd.getOccupancyVect()->getTotalVal() == 0);
int maxLayers = -1;
bool ignoreOutOfBound = false;
CHECK_THROWS_AS(grd.setSphereOccupancy(RDGeom::Point3D(10.0, 0.0, 0.0), 1.5,
0.25, maxLayers, ignoreOutOfBound),
RDGeom::GridException);
}
}
TEST_CASE("compareParams") {
RDGeom::UniformGrid3D grd(6.0, 5.0, 4.0);
{
RDGeom::UniformGrid3D grd2(6.0, 5.0, 4.0);
CHECK(grd.compareParams(grd2));
CHECK(grd2.compareParams(grd));
}
{
RDGeom::UniformGrid3D grd2(7.0, 5.0, 4.0);
CHECK(!grd.compareParams(grd2));
CHECK(!grd2.compareParams(grd));
}
{
RDGeom::UniformGrid3D grd2(6.0, 6.0, 4.0);
CHECK(!grd.compareParams(grd2));
CHECK(!grd2.compareParams(grd));
}
{
RDGeom::UniformGrid3D grd2(6.0, 5.0, 5.0);
CHECK(!grd.compareParams(grd2));
CHECK(!grd2.compareParams(grd));
}
{
RDGeom::UniformGrid3D grd2(6.6, 5.5, 4.4, grd.getSpacing() + .05);
CHECK(!grd.compareParams(grd2));
CHECK(!grd2.compareParams(grd));
}
{
RDGeom::Point3D offset = grd.getOffset();
offset *= 1.5;
RDGeom::UniformGrid3D grd2(6.0, 5.0, 4.0, grd.getSpacing(),
RDKit::DiscreteValueVect::TWOBITVALUE, &offset);
CHECK(!grd.compareParams(grd2));
CHECK(!grd2.compareParams(grd));
}
}