void circle_union() { for (int c = 1; c <= n; ++c) { int cvrcnt = 0; e.clear(); for (int i = 1; i <= n; ++i) { if (i != c) { int r = testCC(center[c], center[i], radius[c], radius[i]); if (r == 2) ++cvrcnt; else if (r == 0) { pair<double, double> paa = isCC(center[c], center[i], radius[c], radius[i]); add(paa.first, paa.second); } } } if (e.size() == 0) { double a = pi * radius[c] * radius[c]; cntarea[cvrcnt] -= a; cntarea[cvrcnt + 1] += a; } else { e.push_back(event_t(-pi, 1)); e.push_back(event_t(pi, -2)); sort(e.begin(), e.end()); for (int i = 0; i < int(e.size()) - 1; ++i) { cvrcnt += e[i].delta; double a = calc(center[c], radius[c], e[i].theta, e[i + 1].theta); cntarea[cvrcnt - 1] -= a; cntarea[cvrcnt] += a; } } } }
int area(vector<rect_t> rect) { vector< event_t > eventx, eventy; for (size_t i = 0, sz = rect.size(); i < sz; ++i){ eventx.pb(event_t(rect[i].x1, i, 0)); eventx.pb(event_t(rect[i].x2, i, 1)); eventy.pb(event_t(rect[i].y1, i, 0)); eventy.pb(event_t(rect[i].y2, i, 1)); } sort(eventx.begin(), eventx.end()); sort(eventy.begin(), eventy.end()); vector< bool > active(int(rect.size()), false); active[eventx[0].frm] = true; int ans = 0; for (size_t i = 1, sz = eventx.size(); i < sz; ++i){ int in = 0; int lst = 0; for (size_t j = 0, szz = eventy.size(); j < szz; ++j){ if (!active[eventy[j].frm]) continue; if (in){ ans += (eventy[j].ax-lst)*(eventx[i].ax-eventx[i-1].ax); lst = eventy[j].ax; } else lst = eventy[j].ax; if (eventy[j].wut) in--; else in++; } if (eventx[i].wut) active[eventx[i].frm] = false; else active[eventx[i].frm] = true; } return ans; }
void add(double begin, double end) { if (begin <= -pi) begin += 2 * pi, end += 2 * pi; if (end > pi) { e.push_back(event_t(begin, 1)); e.push_back(event_t(pi, -1)); e.push_back(event_t(-pi, 1)); e.push_back(event_t(end - 2 * pi, -1)); } else { e.push_back(event_t(begin, 1)); e.push_back(event_t(end, -1)); } }
{ auto&& e = waitServerEvent(); REQUIRE(std::get<0>(e) == expectedEvent); } ~WebsocketTestsFixture() { server.stop(); } }; } TEST_CASE_METHOD(WebsocketTestsFixture, "New connection", "[websocket][slow]") { Client client; REQUIRE(waitServerEvent() == event_t(websocket::Event::NewConnection, 1, "")); } TEST_CASE_METHOD(WebsocketTestsFixture, "Client message", "[websocket][slow]") { Client client; waitServerEvent(websocket::Event::NewConnection); client.sendFrame("\x81\x84" "\x14\x7b\x35\x0f" "\x60\x1e\x46\x7b"); REQUIRE(waitServerEvent() == event_t(websocket::Event::Message, 1, "test")); } TEST_CASE_METHOD(WebsocketTestsFixture, "Server message", "[websocket][slow]") { Client client; waitServerEvent(websocket::Event::NewConnection);
event_t event() const { return event_t(zyre_event_new(m_self)); }