Add broadcast with different ranks in RGG.

Fixes: 132323699
Test: NNT_static_fuzzing
Change-Id: Ica52243ad5fda8d290289febea8ab4f1206dab36
diff --git a/runtime/test/fuzzing/operation_signatures/Broadcast.cpp b/runtime/test/fuzzing/operation_signatures/Broadcast.cpp
index 4d38012..4dbad7b 100644
--- a/runtime/test/fuzzing/operation_signatures/Broadcast.cpp
+++ b/runtime/test/fuzzing/operation_signatures/Broadcast.cpp
@@ -23,23 +23,33 @@
 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.