source: trunk/GDE/SINA/builddir/src/unit_tests/famfinder_test.cpp

Last change on this file was 19170, checked in by westram, 2 years ago
  • sina source
    • unpack + remove tarball
    • no longer ignore sina builddir.
File size: 3.7 KB
Line 
1#include "../famfinder.h"
2
3#define BOOST_TEST_MODULE famfinder
4
5#include <boost/test/unit_test.hpp>
6#include <boost/test/data/test_case.hpp>
7namespace bdata = boost::unit_test::data;
8
9#include <boost/filesystem.hpp>
10namespace fs = boost::filesystem;
11
12#include <boost/program_options.hpp>
13namespace po = boost::program_options;
14
15#include <random>
16#include <set>
17#include <algorithm>
18#include <initializer_list>
19
20#include "../query_arb.h"
21
22using namespace sina;
23
24/** shuffles only the first n items **/
25template<class ITER>
26ITER shuffle_n(ITER begin, ITER end, size_t n) {
27    size_t items = std::distance(begin, end);
28    while (n--) {
29        ITER it = begin;
30        int ran = std::rand() % items;
31        std::advance(it, ran);
32        std::swap(*begin, *it);
33        --items, ++begin;
34    }
35    return begin;
36}
37
38struct Fixture {
39    query_arb *arbdb;
40    std::vector<std::string> ids;
41    const unsigned int N{20};
42    const unsigned int M{50};
43
44    Fixture() {
45        std::srand(1234);
46        int argc = boost::unit_test::framework::master_test_suite().argc;
47        char** argv = boost::unit_test::framework::master_test_suite().argv;
48        BOOST_REQUIRE(argc>1);
49        fs::path database = argv[1];
50        BOOST_TEST_MESSAGE("Loading test database " <<  database << " for testing");
51        arbdb = query_arb::getARBDB(database);
52        ids = arbdb->getSequenceNames();
53        BOOST_REQUIRE(ids.size() > N);
54        shuffle_n(ids.begin(), ids.end(), N);
55    }
56
57    ~Fixture() {
58        BOOST_TEST_MESSAGE("Destroying fixture");
59    }
60};
61
62
63void configure(std::initializer_list<const char*> l) {
64    const char* cmd[l.size()+1];
65    cmd[0] = "sina";
66    int i = 1;
67    for (auto lv : l) {
68        cmd[i++] = lv;
69    }
70    po::variables_map vm;
71    po::options_description od, adv_od;
72    famfinder::get_options_description(od, adv_od);
73    od.add(adv_od);
74    po::store(
75        po::parse_command_line(l.size()+1, cmd, od),
76        vm);
77    try {
78        //BOOST_TEST(vm["db"].as<fs::path>() == "test_data/ltp_reduced.arb");
79        po::notify(vm);
80        famfinder::validate_vm(vm, od);
81    } catch (std::logic_error &e) {
82        BOOST_TEST(e.what() == "");
83    }
84}
85
86BOOST_AUTO_TEST_SUITE(famfinder_tests)
87
88
89BOOST_DATA_TEST_CASE_F(Fixture, turn, bdata::make({"internal", "pt-server"}), engine) {
90    configure({"--db", arbdb->getFileName().c_str(), "--fs-engine", engine});
91
92    famfinder finder;
93
94    for (unsigned int i = 0; i < N; i++) {
95        cseq query = arbdb->getCseq(ids[i]);
96        BOOST_TEST_CONTEXT("Test " << i << "(sequence " << query.getName() << ")") {
97            BOOST_TEST_INFO("Unturned; just revcomp");
98            BOOST_TEST(finder.turn_check(query, false) == 0);
99            BOOST_TEST_INFO("Unturned; all orientations");
100            BOOST_TEST(finder.turn_check(query, true) == 0);
101            query.reverse();
102            BOOST_TEST_INFO("Reversed; all orientations");
103            BOOST_TEST(finder.turn_check(query, true) == 1);
104            query.complement();
105            BOOST_TEST_INFO("Revcomp'ed; just revcomp");
106            BOOST_TEST(finder.turn_check(query, false) == 3);
107            BOOST_TEST_INFO("Revcomp'ed; all orientations");
108            BOOST_TEST(finder.turn_check(query, true) == 3);
109            query.reverse();
110            BOOST_TEST_INFO("Comp'ed; all orientations");
111            BOOST_TEST(finder.turn_check(query, true) == 2);
112        }
113        std::cerr << ".";
114    }
115    std::cerr << std::endl;
116}
117
118
119
120BOOST_AUTO_TEST_SUITE_END(); // famfinder_tests
121
122/*
123  Local Variables:
124  mode:c++
125  c-file-style:"stroustrup"
126  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
127  indent-tabs-mode:nil
128  fill-column:99
129  End:
130*/
131// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
Note: See TracBrowser for help on using the repository browser.