{
d->pbc = pbc;
d->nref = n;
- if (!pbc)
+ // TODO: Consider whether it would be possible to support grid searching in
+ // more cases.
+ if (pbc == NULL || pbc->ePBC != epbcXYZ)
{
d->bGrid = false;
}
ivec cell;
ivec_add(d->testcell, d->gnboffs[nbi], cell);
- /* TODO: Support for 2D and screw PBC */
cell[XX] = (cell[XX] + d->ncelldim[XX]) % d->ncelldim[XX];
cell[YY] = (cell[YY] + d->ncelldim[YY]) % d->ncelldim[YY];
cell[ZZ] = (cell[ZZ] + d->ncelldim[ZZ]) % d->ncelldim[ZZ];
NeighborhoodSearchTestData data_;
};
+class RandomBox2DPBCData
+{
+ public:
+ static const NeighborhoodSearchTestData &get()
+ {
+ static RandomBox2DPBCData singleton;
+ return singleton.data_;
+ }
+
+ RandomBox2DPBCData() : data_(12345, 1.0)
+ {
+ data_.box_[XX][XX] = 10.0;
+ data_.box_[YY][YY] = 7.0;
+ data_.box_[ZZ][ZZ] = 5.0;
+ // TODO: Consider whether manually picking some positions would give better
+ // test coverage.
+ data_.generateRandomRefPositions(1000);
+ data_.generateRandomTestPositions(100);
+ set_pbc(&data_.pbc_, epbcXY, data_.box_);
+ data_.computeReferences(&data_.pbc_);
+ }
+
+ private:
+ NeighborhoodSearchTestData data_;
+};
+
/********************************************************************
* Actual tests
*/
testPairSearch(&search, data);
}
+TEST_F(NeighborhoodSearchTest, GridSearch2DPBC)
+{
+ const NeighborhoodSearchTestData &data = RandomBox2DPBCData::get();
+
+ nb_.setCutoff(data.cutoff_);
+ nb_.setMode(gmx::AnalysisNeighborhood::eSearchMode_Grid);
+ gmx::AnalysisNeighborhoodSearch search =
+ nb_.initSearch(&data.pbc_, data.refPosCount_, data.refPos_);
+ // Currently, grid searching not supported with 2D PBC.
+ //ASSERT_EQ(gmx::AnalysisNeighborhood::eSearchMode_Grid, search.mode());
+
+ testIsWithin(&search, data);
+ testMinimumDistance(&search, data);
+ testNearestPoint(&search, data);
+ testPairSearch(&search, data);
+}
+
} // namespace