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
|
//
// Copyright (C) 2002-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 "RDGeneral/test.h"
#include <catch2/catch_all.hpp>
#include <RDGeneral/Invariant.h>
#include <GraphMol/RDKitBase.h>
#include <GraphMol/FileParsers/FileParsers.h>
#include <GraphMol/SmilesParse/SmilesWrite.h>
#include <GraphMol/SmilesParse/SmartsWrite.h>
#include <RDGeneral/FileParseException.h>
#include <boost/algorithm/string.hpp>
#include <RDGeneral/BadFileException.h>
#include <GraphMol/Chirality.h>
#include <RDGeneral/RDLog.h>
#include <GraphMol/RDKitBase.h>
#include <GraphMol/FileParsers/FileParsers.h>
#include <GraphMol/FileParsers/MolFileStereochem.h>
#include <GraphMol/ChemReactions/Reaction.h>
#include <GraphMol/ChemReactions/ReactionParser.h>
#include <string>
using namespace RDKit;
class MolTest {
public:
std::string fileName;
bool expectedResult;
unsigned int atomCount;
unsigned int bondCount;
MolTest(std::string fileNameInit, bool expectedResultInit, int atomCountInit,
int bondCountInit)
: fileName(fileNameInit),
expectedResult(expectedResultInit),
atomCount(atomCountInit),
bondCount(bondCountInit) {};
};
void testMolFiles(const MolTest *molFileTest) {
BOOST_LOG(rdInfoLog) << "testing marvin writing" << std::endl;
std::string rdbase = getenv("RDBASE");
std::string fName =
rdbase + "/Code/GraphMol/FileParsers/test_data/" + molFileTest->fileName;
try {
std::unique_ptr<RWMol> mol(MolFileToMol(fName, true, false, false));
RDKit::Chirality::reapplyMolBlockWedging(*mol);
CHECK(mol != nullptr);
CHECK(mol->getNumAtoms() == molFileTest->atomCount);
CHECK(mol->getNumBonds() == molFileTest->bondCount);
{
std::string expectedMrvName = fName + ".expected.sdf";
std::string outMolStr = "";
try {
outMolStr = MolToMolBlock(*mol, true, 0, true, true);
} catch (const RDKit::KekulizeException &e) {
outMolStr = "";
} catch (...) {
throw; // re-trhow the error if not a kekule error
}
if (outMolStr == "") {
outMolStr = MolToMolBlock(*mol, true, 0, false,
true); // try without kekule'ing
}
// code to create the expected files for new or changed tests
// {
// std::ofstream out;
// out.open(fName + ".NEW.sdf");
// out << outMolStr;
// }
std::stringstream expectedMolStr;
std::ifstream in;
in.open(expectedMrvName);
expectedMolStr << in.rdbuf();
std::string expectedStr = expectedMolStr.str();
CHECK(expectedStr == outMolStr);
}
BOOST_LOG(rdInfoLog) << "done" << std::endl;
} catch (const std::exception &e) {
if (molFileTest->expectedResult != false) {
throw;
}
return;
}
CHECK(molFileTest->expectedResult == true);
return;
}
TEST_CASE("CrossedDoubleBondWithChiralNbr") {
SECTION("SIMPLE") {
MolTest molTest("CrossedDoubleBondWithChiralNbr.sdf", true, 10, 9);
testMolFiles(&molTest);
}
}
TEST_CASE("CrossedDoubleBondWithChiralNbr2") {
SECTION("SIMPLE") {
MolTest molTest("CrossedDoubleBondWithChiralNbr2.sdf", true, 10, 9);
testMolFiles(&molTest);
}
}
TEST_CASE("SimpleWiggleDoubleBond") {
SECTION("SIMPLE") {
MolTest molTest("SimpleWiggleDoubleBond.sdf", true, 6, 5);
testMolFiles(&molTest);
}
}
|