eval_test.cpp 1.04 KB
Newer Older
Paul's avatar
Paul committed
1
2
3
4
5
6
7
8
9
10
11
12
13

#include <rtg/program.hpp>
#include <rtg/argument.hpp>
#include <rtg/shape.hpp>
#include "test.hpp"

int main() {

    rtg::program p;
    p.add_operator("sum", 
        [](std::vector<rtg::argument> args) {
            rtg::argument result;
            if(args.size() != 2) throw "Wrong args";
Paul's avatar
Paul committed
14
15
16
            if(args[0].get_shape() != args[1].get_shape()) throw "Wrong args";
            if(args[0].get_shape().lens().size() != 1) throw "Wrong args";
            if(args[0].get_shape().lens().front() != 1) throw "Wrong args";
Paul's avatar
Paul committed
17

Paul's avatar
Paul committed
18
19
            args[0].visit_at([&](auto x) {
                args[1].visit_at([&](auto y) {
Paul's avatar
Paul committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
                    result = rtg::literal{x + y}.get_argument();
                });
            });
            return result;
        },
        [](std::vector<rtg::shape> inputs) {
            if(inputs.size() != 2) throw "Wrong inputs";
            return inputs.front();
        }
    );

    auto one = p.add_literal(1);
    auto two = p.add_literal(2);
    p.add_instruction("sum", one, two);
    EXPECT(p.eval() == rtg::literal{3});
}