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

Added reset tests for token collector and runtime



Signed-off-by: default avatarThien Nguyen <nguyentm@ornl.gov>
parent 40b2a246
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -53,7 +53,8 @@ static const std::map<std::string, std::string> gates{
    {"z", "Z"},        {"h", "H"},     {"s", "S"},     {"sdg", "Sdg"},
    {"t", "T"},        {"tdg", "Tdg"}, {"rx", "Rx"},   {"ry", "Ry"},
    {"rz", "Rz"},      {"cz", "CZ"},   {"cy", "CY"},   {"swap", "Swap"},
    {"ccx", "CCX"}, {"ch", "CH"},   {"crz", "CRZ"}, {"measure", "Measure"}};
    {"ccx", "CCX"},    {"ch", "CH"},   {"crz", "CRZ"}, {"measure", "Measure"},
    {"reset", "Reset"}};

void StaqTokenCollector::collect(clang::Preprocessor &PP,
                                 clang::CachedTokens &Toks,
+25 −0
Original line number Diff line number Diff line
@@ -261,6 +261,31 @@ quantum::mz(c[3]);
            ss.str());
}

TEST(StaqTokenCollectorTester, checkReset) {
  LexerHelper helper;

  auto [tokens, PP] = helper.Lex(R"#(
creg c[1];
h q[0];
reset q[0];
reset q[1];
x q[0];
measure q[0] -> c[0];)#");

  clang::CachedTokens cached;
  for (auto &t : tokens) {
    cached.push_back(t);
  }

  std::stringstream ss;
  auto xasm_tc = xacc::getService<qcor::TokenCollector>("staq");
  xasm_tc->collect(*PP.get(), cached, {"q"}, ss);
  std::cout << "heres the test\n";
  std::cout << ss.str() << "\n";
  EXPECT_TRUE(ss.str().find("quantum::reset(q[0]);") != std::string::npos);
  EXPECT_TRUE(ss.str().find("quantum::reset(q[1]);") != std::string::npos);
}

int main(int argc, char **argv) {
  std::string xacc_config_install_dir = std::string(XACC_INSTALL_DIR);
  std::string qcor_root = std::string(QCOR_INSTALL_DIR);
+18 −0
Original line number Diff line number Diff line
@@ -117,6 +117,24 @@ beta_counter ++ ;
            ss.str());
}

TEST(XASMTokenCollectorTester, checkReset) {
  LexerHelper helper;

  auto [tokens, PP] = helper.Lex("H(q[0]);\nReset(q[0]);\nRy(q[3], theta);");

  clang::CachedTokens cached;
  for (auto &t : tokens) {
    cached.push_back(t);
  }

  std::stringstream ss;
  auto xasm_tc = xacc::getService<qcor::TokenCollector>("xasm");
  xasm_tc->collect(*PP.get(), cached, {"q"}, ss);
  std::cout << "heres the test\n";
  std::cout << ss.str() << "\n";
  EXPECT_TRUE(ss.str().find("quantum::reset(q[0]);") != std::string::npos);
}

int main(int argc, char **argv) {
  std::string xacc_config_install_dir = std::string(XACC_INSTALL_DIR);
  std::string qcor_root = std::string(QCOR_INSTALL_DIR);
+17 −0
Original line number Diff line number Diff line
@@ -21,6 +21,23 @@ TEST(NisqQrtTester, checkExpInst) {
  EXPECT_EQ(evaled->toString(), ::quantum::qrt_impl->get_current_program()->toString());
}

TEST(NisqQrtTester, checkResetInstSim) {
  ::quantum::initialize("qpp", "empty");
  ::quantum::set_shots(1024);
  auto qreg = qalloc(1);
  qreg.setName("q");
  ::quantum::h({"q", 0});
  ::quantum::reset({"q", 0});
  ::quantum::x({"q", 0});
  ::quantum::mz({"q", 0});
  std::cout << "HOWDY\n"
            << ::quantum::qrt_impl->get_current_program()->toString() << "\n";
  ::quantum::submit(qreg.results());
  qreg.print();
  // Because of reset after H, qubit -> 0 then becomes 1 after X.
  EXPECT_EQ(qreg.counts()["1"], 1024);
}

int main(int argc, char **argv) {
  ::testing::InitGoogleTest(&argc, argv);
  auto ret = RUN_ALL_TESTS();
+1 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ public:
  void visit(Identity &i) override { addOneQubitGate("i", i); }
  void visit(U &u) override { addOneQubitGate("u3", u); }
  void visit(U1 &u1) override { addOneQubitGate("u1", u1); }
  void visit(Reset &r) override { addOneQubitGate("reset", r); }
  void visit(Circuit &circ) override {
    if (circ.name() == kernelName) {
      return;