File: catch_tests.cpp

package info (click to toggle)
rdkit 202503.1-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 220,160 kB
  • sloc: cpp: 399,240; python: 77,453; ansic: 25,517; java: 8,173; javascript: 4,005; sql: 2,389; yacc: 1,565; lex: 1,263; cs: 1,081; makefile: 580; xml: 229; fortran: 183; sh: 105
file content (145 lines) | stat: -rw-r--r-- 4,721 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//
//   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.
//
#include <catch2/catch_all.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));
  }
}