text: // Copyright (C) 2021 Intel Corporation
  // SPDX-License-Identifier: Apache-2.0
  //
  
  #pragma once
  
  #include <string>
  #include <memory>
  
  #include "shared_test_classes/base/low_precision_transformations/layer_transformation.hpp"
  #include "lpt_ngraph_functions/common/constant.hpp"
  #include "lpt_ngraph_functions/common/reshape.hpp"
  #include "lpt_ngraph_functions/common/dequantization_operations.hpp"
  #include "lpt_ngraph_functions/common/fake_quantize_on_data.hpp"
  #include "lpt_ngraph_functions/common/fake_quantize_on_weights.hpp"
  
  namespace LayerTestsDefinitions {
  
  class GroupConvolutionQDqTransformationParam {
  public:
      ngraph::builder::subgraph::FakeQuantizeOnDataWithConstant fakeQuantizeOnData;
      ngraph::builder::subgraph::DequantizationOperations::Convert convertOnData;
      ngraph::builder::subgraph::DequantizationOperations dequantizationOnData;
  
      ngraph::builder::subgraph::Constant constantOnWeights;
      ngraph::builder::subgraph::FakeQuantizeOnWeights fakeQuantizeOnWeights;
      ngraph::builder::subgraph::DequantizationOperations::Convert convertOnWeights;
      ngraph::builder::subgraph::DequantizationOperations dequantizationOnWeights;
      ngraph::builder::subgraph::Reshape reshape;
  
      std::string layerName;
      std::string expectedKernelType;
      bool multiplyAfter;
  };
  
  inline std::ostream& operator<<(std::ostream& out, const GroupConvolutionQDqTransformationParam& data) {
      return out <<  "_" <<
          data.fakeQuantizeOnData << "_" <<
          data.convertOnData << "_" <<
          data.dequantizationOnData << "_" <<
  
          data.constantOnWeights << "_" <<
          data.fakeQuantizeOnWeights << "_" <<
          data.convertOnWeights << "_" <<
          data.dequantizationOnWeights <<
  
          data.layerName << "_" <<
          data.expectedKernelType << "_" <<
          "multiplyAfter=" << std::boolalpha << data.multiplyAfter;
  }
  
  typedef std::tuple<
      ngraph::element::Type,
      ngraph::Shape,
      std::string,
      ngraph::pass::low_precision::LayerTransformation::Params,
      GroupConvolutionQDqTransformationParam
  > GroupConvolutionQDqTransformationParams;
  
  class GroupConvolutionQDqTransformation :
      public testing::WithParamInterface<GroupConvolutionQDqTransformationParams>,
      public LayerTestsUtils::LayerTransformation {
  public:
      static std::string getTestCaseName(testing::TestParamInfo<GroupConvolutionQDqTransformationParams> obj);
  
  protected:
      void SetUp() override;
  
      void Run() override;
  };
  
  }  // namespace LayerTestsDefinitions
  