Commit 7a6bb450 authored by Nguyen, Thien Minh's avatar Nguyen, Thien Minh
Browse files

Added unit test for create model with a Composite Instruction



Also, clean up CMake for qsim tests

Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent b7f33895
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -25,7 +25,8 @@ int main(int argc, char **argv) {
  // Instantiate a VQE workflow with the nlopt optimizer
  auto workflow = qsim::getWorkflow("vqe", {{"optimizer", optimizer}});

  // Result should contain the observable expectation value along Trotter steps.
  // Result should contain the ground-state energy along with the optimal
  // parameters.
  auto result = workflow->execute(problemModel);

  const auto energy = result.get<double>("energy");
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ public:
  KernelFunctor(std::shared_ptr<CompositeInstruction> composite) {
    kernel = composite;
    q = qalloc(composite->nPhysicalBits());
    nbParams = composite->nParameters();
    nbParams = composite->nVariables();
  }
  qreg &getQreg() { return q; }
  size_t nParams() const { return nbParams; }
+9 −4
Original line number Diff line number Diff line
link_directories(${XACC_ROOT}/lib)

add_executable(TimeSeriesQpeTester TimeSeriesQpeTester.cpp)
add_test(NAME qcor_TimeSeriesQpeTester COMMAND TimeSeriesQpeTester)
target_include_directories(TimeSeriesQpeTester PRIVATE ../../ ../../../base ${XACC_ROOT}/include/gtest ${XACC_ROOT}/include/eigen)
link_directories(${XACC_ROOT}/lib)
target_link_libraries(TimeSeriesQpeTester ${XACC_ROOT}/lib/libgtest.so ${XACC_ROOT}/lib/libgtest_main.so xacc::xacc xacc::quantum_gate qcor-qsim)
target_link_libraries(TimeSeriesQpeTester ${XACC_TEST_LIBRARIES} xacc::xacc xacc::quantum_gate qcor-qsim)


add_executable(TimeSeriesQpeNoiseTester TimeSeriesQpeNoiseTester.cpp)
add_test(NAME qcor_TimeSeriesQpeNoiseTester COMMAND TimeSeriesQpeNoiseTester)
target_include_directories(TimeSeriesQpeNoiseTester PRIVATE ../../ ../../../base ${XACC_ROOT}/include/gtest ${XACC_ROOT}/include/eigen)
link_directories(${XACC_ROOT}/lib)
target_compile_definitions(TimeSeriesQpeNoiseTester PRIVATE RESOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}/resources")
target_link_libraries(TimeSeriesQpeNoiseTester ${XACC_ROOT}/lib/libgtest.so ${XACC_ROOT}/lib/libgtest_main.so xacc::xacc xacc::quantum_gate qcor-qsim)
 No newline at end of file
target_link_libraries(TimeSeriesQpeNoiseTester ${XACC_TEST_LIBRARIES} xacc::xacc xacc::quantum_gate qcor-qsim)

add_executable(VqeWorkflowTester VqeWorkflowTester.cpp)
add_test(NAME qcor_VqeWorkflowTester COMMAND VqeWorkflowTester)
target_include_directories(VqeWorkflowTester PRIVATE ../../ ../../../base ${XACC_ROOT}/include/gtest)
target_link_libraries(VqeWorkflowTester ${XACC_TEST_LIBRARIES} xacc::xacc xacc::quantum_gate qcor-qsim)
 No newline at end of file
+37 −0
Original line number Diff line number Diff line
#include "qcor.hpp"
#include "qcor_qsim.hpp"
#include "xacc.hpp"
#include <gtest/gtest.h>

TEST(VqeWorkflowTest, checkInputComposite) {
  using namespace qcor;
  auto observable = 5.907 - 2.1433 * X(0) * X(1) - 2.1433 * Y(0) * Y(1) +
                    .21829 * Z(0) - 6.125 * Z(1);
  xacc::internal_compiler::qpu = xacc::getAccelerator("qpp");

  auto xasm = xacc::getCompiler("xasm");
  auto tmp = xasm->compile(R"#(__qpu__ void ansatz(qbit q, double theta) {
  X(q[0]);
  exp_i_theta(q, theta, {{"pauli", "X0 Y1 - Y0 X1"}});
  }
)#");
  auto kernel = tmp->getComposites()[0];
  auto H = 5.907 - 2.1433 * X(0) * X(1) - 2.143 * Y(0) * Y(1) + 0.21829 * Z(0) -
           6.125 * Z(1);
  auto problemModel = qsim::ModelBuilder::createModel(kernel, H);
  auto optimizer = createOptimizer("nlopt");
  // Instantiate a VQE workflow with the nlopt optimizer
  auto workflow = qsim::getWorkflow("vqe", {{"optimizer", optimizer}});
  auto result = workflow->execute(problemModel);
  const auto energy = result.get<double>("energy");
  std::cout << "Min energy: " << energy << "\n";
  EXPECT_NEAR(energy, -1.748, 0.1);
}

int main(int argc, char **argv) {
  xacc::Initialize();
  ::testing::InitGoogleTest(&argc, argv);
  auto ret = RUN_ALL_TESTS();
  xacc::Finalize();
  return ret;
}
 No newline at end of file