loom

Форк
0
121 строка · 3.9 Кб
1
/*
2
MIT License
3

4
Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5

6
https://bmstu.codes/lsx/simodo
7
*/
8

9
/*! \file Утилита тестирования средств лексического анализа библиотеки SIMODO core. Проект SIMODO.
10
*/
11

12
#include "simodo/module/ModuleCollector.h"
13
#include "simodo/inout/convert/functions.h"
14

15
#include <iostream>
16

17
using namespace simodo;
18

19
int main(int argc, char *argv[])
20
{
21
    std::string module_name   {"test"};
22
    std::string module_setter {"set_test_string"};
23
    std::string module_getter {"get_test_string"};
24

25
    if (argc > 1)
26
        module_name = argv[1];
27

28
    if (argc > 2)
29
        module_setter = argv[2];
30

31
    if (argc > 3)
32
        module_getter = argv[3];
33

34
    module::ModuleCollector collector({"bin/modules"});
35

36
    // Проверка работы сетера и гетера  
37
    std::shared_ptr<variable::Object> object1 = collector.produceObject(module_name);
38
    if (!object1) {
39
        std::cout << collector.last_error() << std::endl;
40
        return 1;
41
    }
42

43
    variable::Value ret11 = collector.invoke(*object1, module_getter, {});
44
    if (!collector.last_error().empty()) {
45
        std::cout << collector.last_error() << std::endl;
46
        return 1;
47
    }
48

49
    std::cout << module_name << " object1" << "." << module_getter << " returned: " 
50
              << inout::toU8(toString(ret11)) 
51
              << std::endl;
52

53
    collector.invoke(*object1, module_setter, {{u"",{u"collector call 1"}}});
54
    if (!collector.last_error().empty()) {
55
        std::cout << collector.last_error() << std::endl;
56
        return 1;
57
    }
58

59
    variable::Value ret13 = collector.invoke(*object1, module_getter, {});
60
    if (!collector.last_error().empty()) {
61
        std::cout << collector.last_error() << std::endl;
62
        return 1;
63
    }
64

65
    std::cout << module_name  << " object1" << "." << module_getter << " returned: " 
66
              << inout::toU8(toString(ret13)) 
67
              << std::endl;
68

69
    // Проверка, что нет зависимости между внешними модулями
70
    std::shared_ptr<variable::Object> object2 = collector.produceObject(module_name);
71
    if (!object1) {
72
        std::cout << collector.last_error() << std::endl;
73
        return 1;
74
    }
75

76
    variable::Value ret21 = collector.invoke(*object2, module_getter, {});
77
    if (!collector.last_error().empty()) {
78
        std::cout << collector.last_error() << std::endl;
79
        return 1;
80
    }
81

82
    std::cout << module_name  << " object2" << "." << module_getter << " returned: " 
83
              << inout::toU8(toString(ret21)) 
84
              << std::endl;
85

86
    collector.invoke(*object2, module_setter, {{u"",{u"collector call 2"}}});
87
    if (!collector.last_error().empty()) {
88
        std::cout << collector.last_error() << std::endl;
89
        return 1;
90
    }
91

92
    variable::Value ret23 = collector.invoke(*object2, module_getter, {});
93
    if (!collector.last_error().empty()) {
94
        std::cout << collector.last_error() << std::endl;
95
        return 1;
96
    }
97

98
    std::cout << module_name  << " object2" << "." << module_getter << " returned: " 
99
              << inout::toU8(toString(ret23)) 
100
              << std::endl;
101

102
    variable::Value ret14 = collector.invoke(*object1, module_getter, {});
103
    if (!collector.last_error().empty()) {
104
        std::cout << collector.last_error() << std::endl;
105
        return 1;
106
    }
107

108
    std::cout << module_name  << " object1" << "." << module_getter << " returned: " 
109
              << inout::toU8(toString(ret14)) 
110
              << std::endl;
111

112
    // Вывод:
113
    // test object1.get_test_string returned: "initial test string"
114
    // test object1.get_test_string returned: "collector call 1"
115
    // test object2.get_test_string returned: "initial test string"
116
    // test object2.get_test_string returned: "collector call 2"
117
    // test object1.get_test_string returned: "collector call 1"
118

119

120
    return 0;
121
}
122

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.