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

Added FTQC test



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent d0e9d230
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ else()
endif()

if (QCOR_BUILD_TESTS) 
  #add_subdirectory(tests)
  add_subdirectory(tests)
endif()

install(TARGETS ${LIBRARY_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/plugins)
+9 −0
Original line number Diff line number Diff line
link_directories(${XACC_ROOT}/lib)
if (NOT XACC_ROOT STREQUAL CMAKE_INSTALL_PREFIX)
  add_definitions(-D__internal__qcor__compile__plugin__path="${CMAKE_INSTALL_PREFIX}/plugins")
endif()

add_executable(FtqcQrtTester FtqcQrtTester.cpp)
add_test(NAME qcor_FtqcQrtTester COMMAND FtqcQrtTester)
target_include_directories(FtqcQrtTester PRIVATE ${XACC_ROOT}/include/gtest)
target_link_libraries(FtqcQrtTester ${XACC_TEST_LIBRARIES} qcor)
 No newline at end of file
+59 −0
Original line number Diff line number Diff line
#include "qcor.hpp"
#include <gtest/gtest.h>
#include "xacc_service.hpp"

TEST(FtqcQrtTester, checkSimple) {
  ::quantum::set_qrt("ftqc");
  ::quantum::initialize("qpp", "empty");
  auto qreg = qalloc(1);
  qreg.setName("q");
  ::quantum::set_current_buffer(qreg.results());
  const auto nTests = 100;
  int nZeros = 0;
  int nOnes = 0;
  for (int i = 0; i < nTests; ++i) {
    ::quantum::h({"q", 0});
    if (::quantum::mz({"q", 0})) {
      ++nOnes;
    } else {
      ++nZeros;
    }
  }
  std::cout << "Number of one: " << nOnes << "\n";
  std::cout << "Number of zero: " << nZeros << "\n";
  EXPECT_GT(nZeros, 0);
  EXPECT_GT(nOnes, 0);
}

TEST(FtqcQrtTester, checkReset) {
  ::quantum::set_qrt("ftqc");
  ::quantum::initialize("qpp", "empty");
  auto qreg = qalloc(1);
  qreg.setName("q");
  ::quantum::set_current_buffer(qreg.results());
  const auto nTests = 100;
  int nZeros = 0;
  int nOnes = 0;
  for (int i = 0; i < nTests; ++i) {
    ::quantum::h({"q", 0});
    // Apply reset
    ::quantum::reset({"q", 0});
    ::quantum::x({"q", 0});
    if (::quantum::mz({"q", 0})) {
      ++nOnes;
    } else {
      ++nZeros;
    }
  }
  std::cout << "Number of one: " << nOnes << "\n";
  std::cout << "Number of zero: " << nZeros << "\n";
  EXPECT_EQ(nZeros, 0);
  // Expect all 1's due to reset.
  EXPECT_EQ(nOnes, 100);
}

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  auto ret = RUN_ALL_TESTS();
  return ret;
}