DEF_TEST(HashSet, r) { SkTHashSet<SkString> set; set.add(SkString("Hello")); set.add(SkString("World")); REPORTER_ASSERT(r, set.count() == 2); REPORTER_ASSERT(r, set.contains(SkString("Hello"))); REPORTER_ASSERT(r, set.contains(SkString("World"))); REPORTER_ASSERT(r, !set.contains(SkString("Goodbye"))); REPORTER_ASSERT(r, set.find(SkString("Hello"))); REPORTER_ASSERT(r, *set.find(SkString("Hello")) == SkString("Hello")); set.remove(SkString("Hello")); REPORTER_ASSERT(r, !set.contains(SkString("Hello"))); REPORTER_ASSERT(r, set.count() == 1); set.reset(); REPORTER_ASSERT(r, set.count() == 0); }
int main(int argc, char**argv) { Display* display = XOpenDisplay(nullptr); Application* app = Application::Create(argc, argv, (void*)display); // Get the file descriptor for the X display int x11_fd = ConnectionNumber(display); fd_set in_fds; SkTHashSet<sk_app::Window_unix*> pendingWindows; bool done = false; while (!done) { // Create a file description set containing x11_fd FD_ZERO(&in_fds); FD_SET(x11_fd, &in_fds); // Set a sleep timer struct timeval tv; tv.tv_usec = 100; tv.tv_sec = 0; // Wait for an event on the file descriptor or for timer expiration (void) select(1, &in_fds, NULL, NULL, &tv); // Handle XEvents (if any) and flush the input XEvent event; while (XPending(display) && !done) { XNextEvent(display, &event); sk_app::Window_unix* win = sk_app::Window_unix::gWindowMap.find(event.xany.window); // paint and resize events get collapsed switch (event.type) { case Expose: win->markPendingPaint(); pendingWindows.add(win); break; case ConfigureNotify: win->markPendingResize(event.xconfigurerequest.width, event.xconfigurerequest.height); pendingWindows.add(win); break; default: if (win->handleEvent(event)) { done = true; } break; } } pendingWindows.foreach(finishWindow); if (pendingWindows.count() > 0) { app->onIdle(); } pendingWindows.reset(); } delete app; XCloseDisplay(display); return 0; }