diff options
author | Xusong Wang <xusongw@google.com> | 2020-03-19 18:29:15 -0700 |
---|---|---|
committer | Xusong Wang <xusongw@google.com> | 2020-04-07 09:53:20 -0700 |
commit | 10f4d020579c0e0e4d945ffe2f9cc62d392c344e (patch) | |
tree | 81f2364d2eb6c7fb865ed58d8d49c5a8e70f06ce /nn/runtime/test/fuzzing | |
parent | ec251f330c74bf156ec13a5f82d87e0c8501af7e (diff) | |
download | ml-10f4d020579c0e0e4d945ffe2f9cc62d392c344e.tar.gz |
Add broadcast with different ranks in RGG.
Fixes: 132323699
Test: NNT_static_fuzzing
Change-Id: Ica52243ad5fda8d290289febea8ab4f1206dab36
Diffstat (limited to 'nn/runtime/test/fuzzing')
-rw-r--r-- | nn/runtime/test/fuzzing/operation_signatures/Broadcast.cpp | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/nn/runtime/test/fuzzing/operation_signatures/Broadcast.cpp b/nn/runtime/test/fuzzing/operation_signatures/Broadcast.cpp index 4d380128c..4dbad7b81 100644 --- a/nn/runtime/test/fuzzing/operation_signatures/Broadcast.cpp +++ b/nn/runtime/test/fuzzing/operation_signatures/Broadcast.cpp @@ -23,23 +23,33 @@ namespace nn { namespace fuzzing_test { static void broadcastOpConstructor(TestOperandType dataType, uint32_t rank, RandomOperation* op) { - // TODO: All inputs of the broadcast op have the same rank 4 for now. + const uint32_t rank2 = getUniform(1u, rank), rankDiff = rank - rank2; op->inputs[0]->dimensions.resize(rank); - op->inputs[1]->dimensions.resize(rank); + op->inputs[1]->dimensions.resize(rank2); op->outputs[0]->dimensions.resize(rank); for (uint32_t i = 0; i < rank; i++) { - if (getBernoulli(0.9f)) { - op->inputs[0]->dimensions[i] = RandomVariableType::FREE; + op->outputs[0]->dimensions[i] = RandomVariableType::FREE; + if (i < rankDiff) { + op->inputs[0]->dimensions[i] = op->outputs[0]->dimensions[i]; } else { - op->inputs[0]->dimensions[i] = 1; + if (getBernoulli(0.5f)) { + // No broadcast on this dimension. + op->inputs[0]->dimensions[i] = op->outputs[0]->dimensions[i]; + op->inputs[1]->dimensions[i - rankDiff] = op->outputs[0]->dimensions[i]; + } else if (getBernoulli(0.5f)) { + // input0 broadcast on this dimension. + op->inputs[0]->dimensions[i] = 1; + op->inputs[1]->dimensions[i - rankDiff] = op->outputs[0]->dimensions[i]; + } else { + // input1 broadcast on this dimension. + op->inputs[0]->dimensions[i] = op->outputs[0]->dimensions[i]; + op->inputs[1]->dimensions[i - rankDiff] = 1; + } } - if (getBernoulli(0.9f)) { - op->inputs[1]->dimensions[i] = op->inputs[0]->dimensions[i]; - } else { - op->inputs[1]->dimensions[i] = 1; - } - op->outputs[0]->dimensions[i] = - max(op->inputs[0]->dimensions[i], op->inputs[1]->dimensions[i]); + } + if (getBernoulli(0.5f)) { + // Swap the dimensions to test the case that inpuy 1 has a larger rank than input0. + op->inputs[0]->dimensions.swap(op->inputs[1]->dimensions); } // MUL requires output.scale > input0.scale * input1.scale. |