File: deprotectTest.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 (88 lines) | stat: -rw-r--r-- 3,033 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
//
//  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 <catch2/catch_all.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));
      }
    }
  }
}