MCPcopy Create free account
hub / github.com/MegEngine/MegCC / TEST

Function TEST

runtime/test/instruction/subtensor.cpp:7–124  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5using namespace test;
6
7TEST(INSTRUCTION, SubTensorTest) {
8 std::vector<Instruction> insts;
9 std::vector<std::shared_ptr<Tensor>> in_tensors;
10 std::vector<std::shared_ptr<Tensor>> out_tensors;
11 std::vector<Tensor*> inputs;
12
13 //! input shape =[20, 20, 20]
14 std::vector<float> data(20 * 20 * 20);
15 for (size_t i = 0; i < 20 * 20 * 20; i++) {
16 data[i] = i;
17 }
18 auto src_tensor = create_tensor({20, 20, 20}, TinyNN_FLOAT, data.data());
19
20 auto create_subtensor = [&](IndexDesc* index, IndexDesc* flag,
21 std::vector<uint32_t> scaler_value = {}) {
22 auto subtensor = std::make_shared<SubTensor>();
23 inputs.clear();
24 inputs.push_back(src_tensor.get());
25 if (flag->start == 1) {
26 in_tensors.push_back(create_scalar_tensor(scaler_value[0], TinyNN_INT));
27 inputs.push_back(in_tensors.back().get());
28 scaler_value.erase(scaler_value.begin());
29 }
30 if (flag->end == 1) {
31 in_tensors.push_back(create_scalar_tensor(scaler_value[0], TinyNN_INT));
32 inputs.push_back(in_tensors.back().get());
33 scaler_value.erase(scaler_value.begin());
34 }
35 if (flag->step == 1) {
36 in_tensors.push_back(create_scalar_tensor(scaler_value[0], TinyNN_INT));
37 inputs.push_back(in_tensors.back().get());
38 scaler_value.erase(scaler_value.begin());
39 }
40 if (flag->index == 1) {
41 in_tensors.push_back(create_scalar_tensor(scaler_value[0], TinyNN_INT));
42 inputs.push_back(in_tensors.back().get());
43 scaler_value.erase(scaler_value.begin());
44 }
45 auto output = std::make_shared<Tensor>();
46 output->is_dynamic = true;
47 out_tensors.push_back(output);
48
49 subtensor->nr_descs = 1;
50 subtensor->descs = index;
51 subtensor->flags = flag;
52
53 subtensor->nr_input = inputs.size();
54 subtensor->inputs = inputs.data();
55 subtensor->output = out_tensors.back().get();
56 return subtensor;
57 };
58 VM* vm = create_vm();
59 auto test_subtensor = [&](IndexDesc* index, IndexDesc* flag, const Tensor& expect,
60 std::vector<uint32_t> input_idx = {}) {
61 auto subtensor = create_subtensor(index, flag, input_idx);
62 Instruction inst;
63 inst.tag = TinyNN_INST_SUBTENSOR;
64 inst.workload.subtensor = *subtensor;

Callers

nothing calls this directly

Calls 5

create_scalar_tensorFunction · 0.85
vm_instruction_callFunction · 0.85
clearMethod · 0.45
getMethod · 0.45
freeMethod · 0.45

Tested by

no test coverage detected