File: deprotectTest.cpp

package info (click to toggle)
rdkit 202209.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 203,880 kB
  • sloc: cpp: 334,239; python: 80,247; ansic: 24,579; java: 7,667; sql: 2,123; yacc: 1,884; javascript: 1,358; lex: 1,260; makefile: 576; xml: 229; fortran: 183; cs: 181; sh: 101
file content (88 lines) | stat: -rw-r--r-- 3,022 bytes parent folder | download
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
//
//  Copyright (C) 2020-2021 Brian P Kelley, Joann Prescott-Roy 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 "catch.hpp"

#include <GraphMol/RDKitBase.h>
#include <GraphMol/ROMol.h>
#include <GraphMol/SmilesParse/SmilesParse.h>
#include <GraphMol/SmilesParse/SmilesWrite.h>
#include <GraphMol/Deprotect/Deprotect.h>
#include <boost/algorithm/string.hpp>

using namespace RDKit;
using namespace RDKit::Deprotect;
TEST_CASE("Deprotection basics", "[deprotect]") {
  const auto dps = getDeprotections();
  DeprotectData cp = dps[0];
  CHECK(cp == dps[0]);
  CHECK(dps[0] == cp);
  CHECK(dps[1] != dps[0]);
}

TEST_CASE("Standard deprotections", "[deprotect]") {
  SECTION("simple deprotections") {
    auto m = "N(C(=O)OC(C)(C)C)Cc1ccccc1NC(=O)OC(C)(C)C"_smiles;
    auto res = deprotect(*m);
    REQUIRE(res);
    CHECK(MolToSmiles(*res) == "NCc1ccccc1N");
    CHECK(res->getProp<int>("DEPROTECTION_COUNT") == 2);
    std::vector<std::string> expected{"Boc", "Boc"};
    CHECK(res->getProp<std::vector<std::string>>("DEPROTECTIONS") == expected);
  }
  SECTION("test deprotection examples") {
    for (auto &data : getDeprotections()) {
      std::vector<DeprotectData> vect = {data};
      std::vector<std::string> examples;
      boost::split(examples, data.example, boost::is_any_of(">"));
      std::unique_ptr<ROMol> start(SmilesToMol(examples[0]));
      std::unique_ptr<ROMol> end(SmilesToMol(examples[2]));
      // check the one
      auto res = deprotect(*start, vect);
      CHECK(MolToSmiles(*res) == MolToSmiles(*end));
      // check them all

      res = deprotect(*start);
      CHECK(MolToSmiles(*res) == MolToSmiles(*end));
    }
  }
}

TEST_CASE("Standard deprotections in place", "[deprotect]") {
  SECTION("simple deprotections") {
    auto m = "N(C(=O)OC(C)(C)C)Cc1ccccc1NC(=O)OC(C)(C)C"_smiles;
    CHECK(deprotectInPlace(*m));
    CHECK(MolToSmiles(*m) == "NCc1ccccc1N");
    CHECK(m->getProp<int>("DEPROTECTION_COUNT") == 2);
    std::vector<std::string> expected{"Boc", "Boc"};
    CHECK(m->getProp<std::vector<std::string>>("DEPROTECTIONS") == expected);
  }
  SECTION("test deprotection examples") {
    for (auto &data : getDeprotections()) {
      std::vector<DeprotectData> vect = {data};
      std::vector<std::string> examples;
      boost::split(examples, data.example, boost::is_any_of(">"));
      std::unique_ptr<RWMol> end(SmilesToMol(examples[2]));
      // check the one
      {
        std::unique_ptr<RWMol> start(SmilesToMol(examples[0]));
        deprotectInPlace(*start, vect);
        CHECK(MolToSmiles(*start) == MolToSmiles(*end));
      }

      // check them all
      {
        std::unique_ptr<RWMol> start(SmilesToMol(examples[0]));
        deprotectInPlace(*start);
        CHECK(MolToSmiles(*start) == MolToSmiles(*end));
      }
    }
  }
}