@@ -918,6 +918,117 @@ const Model* BuildSimpleModelWithSubgraphsAndIf() {
918918 return model;
919919}
920920
921+ const Model* BuildSimpleModelWithIfAndEmptySubgraph () {
922+ using flatbuffers::Offset;
923+ flatbuffers::FlatBufferBuilder* builder = BuilderInstance ();
924+
925+ constexpr size_t buffers_size = 1 ;
926+ const Offset<Buffer> buffers[buffers_size] = {
927+ CreateBuffer (*builder),
928+ };
929+ const int32_t condition_tensor_shape[] = {1 };
930+ const int32_t data_tensor_shape[] = {1 , 2 };
931+ constexpr size_t tensors_size = 4 ;
932+ const Offset<Tensor> subgraph1_tensors[tensors_size] = {
933+ CreateTensor (*builder, builder->CreateVector (condition_tensor_shape, 1 ),
934+ TensorType_BOOL, 0 ,
935+ builder->CreateString (" condition tensor" ), 0 , false ),
936+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
937+ TensorType_FLOAT32, 0 ,
938+ builder->CreateString (" input_tensor1" ), 0 , false ),
939+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
940+ TensorType_FLOAT32, 0 ,
941+ builder->CreateString (" input_tensor2" ), 0 , false ),
942+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
943+ TensorType_FLOAT32, 0 ,
944+ builder->CreateString (" output_tensor" ), 0 , false ),
945+ };
946+ const Offset<Tensor> subgraph2_tensors[tensors_size] = {
947+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
948+ TensorType_FLOAT32, 0 ,
949+ builder->CreateString (" input_tensor1" ), 0 , false ),
950+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
951+ TensorType_FLOAT32, 0 ,
952+ builder->CreateString (" input_tensor2" ), 0 , false ),
953+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
954+ TensorType_FLOAT32, 0 ,
955+ builder->CreateString (" output_tensor" ), 0 , false ),
956+ };
957+ const Offset<Tensor> subgraph3_tensors[tensors_size] = {
958+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
959+ TensorType_FLOAT32, 0 ,
960+ builder->CreateString (" input_tensor1" ), 0 , false ),
961+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
962+ TensorType_FLOAT32, 0 ,
963+ builder->CreateString (" input_tensor2" ), 0 , false ),
964+ CreateTensor (*builder, builder->CreateVector (data_tensor_shape, 2 ),
965+ TensorType_FLOAT32, 0 ,
966+ builder->CreateString (" output_tensor" ), 0 , false ),
967+ };
968+
969+ constexpr size_t if_inputs_size = 3 ;
970+ const int32_t if_inputs[if_inputs_size] = {0 , 1 , 2 };
971+ constexpr size_t outputs_size = 1 ;
972+ const int32_t if_outputs[outputs_size] = {3 };
973+ constexpr size_t operator_inputs_size = 2 ;
974+ const int32_t operator_inputs[operator_inputs_size] = {0 , 1 };
975+ const int32_t operator_outputs[outputs_size] = {2 };
976+ constexpr size_t operators_size = 1 ;
977+ const Offset<Operator> subgraph1_operators[operators_size] = {
978+ CreateOperator (
979+ *builder, 0 , builder->CreateVector (if_inputs, if_inputs_size),
980+ builder->CreateVector (if_outputs, outputs_size),
981+ BuiltinOptions_IfOptions, CreateIfOptions (*builder, 1 , 2 ).Union ()),
982+ };
983+ const Offset<Operator> subgraph2_operators[operators_size] = {
984+ CreateOperator (
985+ *builder, 1 ,
986+ builder->CreateVector (operator_inputs, operator_inputs_size),
987+ builder->CreateVector (operator_outputs, outputs_size),
988+ BuiltinOptions_NONE),
989+ };
990+ constexpr size_t subgraphs_size = 3 ;
991+ const Offset<SubGraph> subgraphs[subgraphs_size] = {
992+ CreateSubGraph (*builder, builder->CreateVector (subgraph1_tensors, 4 ),
993+ builder->CreateVector (if_inputs, if_inputs_size),
994+ builder->CreateVector (if_outputs, outputs_size),
995+ builder->CreateVector (subgraph1_operators, operators_size),
996+ builder->CreateString (" if_subgraph" )),
997+ CreateSubGraph (
998+ *builder, builder->CreateVector (subgraph2_tensors, 3 ),
999+ builder->CreateVector (operator_inputs, operator_inputs_size),
1000+ builder->CreateVector (operator_outputs, outputs_size),
1001+ builder->CreateVector (subgraph2_operators, operators_size),
1002+ builder->CreateString (" then_subgraph" )),
1003+ CreateSubGraph (
1004+ *builder, builder->CreateVector (subgraph3_tensors, 3 ),
1005+ builder->CreateVector (operator_inputs, operator_inputs_size),
1006+ builder->CreateVector (operator_outputs, outputs_size), 0 ,
1007+ builder->CreateString (" else_subgraph" )),
1008+ };
1009+ constexpr size_t operator_codes_size = 3 ;
1010+ const Offset<OperatorCode> operator_codes[operator_codes_size] = {
1011+ CreateOperatorCodeDirect (*builder, /* deprecated_builtin_code=*/ 0 ,
1012+ " multiple_inputs_op" ,
1013+ /* version=*/ 0 , BuiltinOperator_IF),
1014+ CreateOperatorCodeDirect (*builder, /* deprecated_builtin_code=*/ 0 ,
1015+ " multiple_inputs_op" ,
1016+ /* version=*/ 0 , BuiltinOperator_ADD),
1017+ CreateOperatorCodeDirect (*builder, /* deprecated_builtin_code=*/ 0 ,
1018+ " multiple_inputs_op" ,
1019+ /* version=*/ 0 , BuiltinOperator_MUL),
1020+ };
1021+ const Offset<Model> model_offset = CreateModel (
1022+ *builder, 0 , builder->CreateVector (operator_codes, operator_codes_size),
1023+ builder->CreateVector (subgraphs, subgraphs_size),
1024+ builder->CreateString (" test_model" ),
1025+ builder->CreateVector (buffers, buffers_size));
1026+ FinishModelBuffer (*builder, model_offset);
1027+ void * model_pointer = builder->GetBufferPointer ();
1028+ const Model* model = flatbuffers::GetRoot<Model>(model_pointer);
1029+ return model;
1030+ }
1031+
9211032const Model* BuildSimpleModelWithSubgraphsAndWhile () {
9221033 using flatbuffers::Offset;
9231034 flatbuffers::FlatBufferBuilder* builder = BuilderInstance ();
@@ -1604,6 +1715,14 @@ const Model* GetSimpleModelWithSubgraphsAndIf() {
16041715 return model;
16051716}
16061717
1718+ const Model* GetSimpleModelWithIfAndEmptySubgraph () {
1719+ static Model* model = nullptr ;
1720+ if (!model) {
1721+ model = const_cast <Model*>(BuildSimpleModelWithIfAndEmptySubgraph ());
1722+ }
1723+ return model;
1724+ }
1725+
16071726const Model* GetSimpleModelWithSubgraphsAndWhile () {
16081727 static Model* model = nullptr ;
16091728 if (!model) {
0 commit comments