Add tests
diff --git a/tests/cc/test_c_api.cc b/tests/cc/test_c_api.cc
index 31dc5ec..8b96c64 100644
--- a/tests/cc/test_c_api.cc
+++ b/tests/cc/test_c_api.cc
@@ -200,9 +200,22 @@
 
 TEST_CASE("resolve symbol addresses for a given PID", "[c_api]") {
   struct bcc_symbol sym;
+  struct bcc_symbol lazy_sym;
+  static struct bcc_symbol_option lazy_opt{
+    .use_debug_file = 1,
+    .check_debug_file_crc = 1,
+    .lazy_symbolize = 1,
+#if defined(__powerpc64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+    .use_symbol_type = BCC_SYM_ALL_TYPES | (1 << STT_PPC64LE_SYM_LEP),
+#else
+    .use_symbol_type = BCC_SYM_ALL_TYPES,
+#endif
+  };
   void *resolver = bcc_symcache_new(getpid(), nullptr);
+  void *lazy_resolver = bcc_symcache_new(getpid(), &lazy_opt);
 
   REQUIRE(resolver);
+  REQUIRE(lazy_resolver);
 
   SECTION("resolve in our own binary memory space") {
     REQUIRE(bcc_symcache_resolve(resolver, (uint64_t)&_a_test_function, &sym) ==
@@ -213,6 +226,11 @@
     free(this_exe);
 
     REQUIRE(string("_a_test_function") == sym.name);
+
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)&_a_test_function, &lazy_sym) ==
+            0);
+    REQUIRE(string(lazy_sym.name) == sym.name);
+    REQUIRE(string(lazy_sym.module) == sym.module);
   }
 
   SECTION("resolve in libbcc.so") {
@@ -225,6 +243,10 @@
     REQUIRE(bcc_symcache_resolve(resolver, (uint64_t)libbcc_fptr, &sym) == 0);
     REQUIRE(string(sym.module).find("libbcc.so") != string::npos);
     REQUIRE(string("bcc_resolve_symname") == sym.name);
+
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)libbcc_fptr, &lazy_sym) == 0);
+    REQUIRE(string(lazy_sym.module) == sym.module);
+    REQUIRE(string(lazy_sym.name) == sym.name);
   }
 
   SECTION("resolve in libc") {
@@ -236,6 +258,10 @@
     REQUIRE(sym.module[0] == '/');
     REQUIRE(string(sym.module).find("libc") != string::npos);
 
+    REQUIRE(bcc_symcache_resolve(lazy_resolver, (uint64_t)libc_fptr, &lazy_sym) == 0);
+    REQUIRE(string(lazy_sym.module) == sym.module);
+    REQUIRE(string(lazy_sym.name) == sym.name);
+
     // In some cases, a symbol may have multiple aliases. Since
     // bcc_symcache_resolve() returns only the first alias of a
     // symbol, this may not always be "strtok" even if it points
@@ -266,6 +292,7 @@
   SECTION("resolve in separate mount namespace") {
     pid_t child;
     uint64_t addr = 0;
+    uint64_t lazy_addr = 0;
 
     child = spawn_child(0, true, true, mntns_func);
     REQUIRE(child > 0);
@@ -276,6 +303,12 @@
     REQUIRE(bcc_symcache_resolve_name(resolver, "/tmp/libz.so.1", "zlibVersion",
         &addr) == 0);
     REQUIRE(addr != 0);
+
+    void *lazy_resolver = bcc_symcache_new(child, &lazy_opt);
+    REQUIRE(lazy_resolver);
+    REQUIRE(bcc_symcache_resolve_name(lazy_resolver, "/tmp/libz.so.1", "zlibVersion",
+        &lazy_addr) == 0);
+    REQUIRE(lazy_addr == addr);
   }
 }