summaryrefslogtreecommitdiff
path: root/nn/runtime/test/fuzzing
diff options
context:
space:
mode:
authorXusong Wang <xusongw@google.com>2020-03-19 18:29:15 -0700
committerXusong Wang <xusongw@google.com>2020-04-07 09:53:20 -0700
commit10f4d020579c0e0e4d945ffe2f9cc62d392c344e (patch)
tree81f2364d2eb6c7fb865ed58d8d49c5a8e70f06ce /nn/runtime/test/fuzzing
parentec251f330c74bf156ec13a5f82d87e0c8501af7e (diff)
downloadml-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.cpp34
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.