⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sked_test.cc

📁 实现了poll/epoll/devpoll等C++封装
💻 CC
字号:
#include <errno.h>#include <stdlib.h>#include <stdio.h>#include <assert.h>#include <limits.h>		// for MAXINT#include "Sked.h"#include "dprint.h"clock_t g_prev_when = 0;int g_errors = 0;int g_events = 0;class SkedTestClient : public SkedClient {public:	int m_id;	clock_t m_when;	SkedTestClient(int id, clock_t when) : m_id(id), m_when(when) {}	void skedCallback(clock_t now);};void SkedTestClient::skedCallback(clock_t now){	//DPRINT(("SkedTestClient::skedCallback(%ld) when %ld id %d\n", now, m_when, m_id));	if (eclock_after(g_prev_when, m_when)) {		g_errors++;		printf("SkedTestClient::skedCallback(): Error, event %d out of order.\n", m_id);	}	g_events++;	g_prev_when = m_when;	(void) now;}/* Return time in seconds it took to push and pop n events in a size n heap */float pushpopn(int n){	Sked sk;	SkedTestClient **sc;	int err = sk.init();	if (err) {		printf("pushpoptest: Sked::init() failed.\n");		exit(1);	}	sc = (SkedTestClient **)malloc(n * sizeof(SkedTestClient *));	if (!sc) {		g_errors++;		return ENOMEM;	}	/* preload */	for (int i=n-1; i>=0; i--) {		sc[i] = new SkedTestClient(i,0);		Sked::SkedRecord sr(sc[i], random());		err = sk.push(&sr);		if (err)			g_errors++;	}	/* Time n inserts in a size n heap */	clock_t start = eclock();	for (int j=0; j<n; j++) {		const Sked::SkedRecord *p = sk.top();		SkedTestClient *scp;		if (!p) {			g_errors++;			return -1;		}		if (sk.empty()) {			g_errors++;			return -1;		}		/* Recycle the client that is going away */		scp = (SkedTestClient *)(p->skc);		assert(scp->skedIndex == 1);		sk.pop();		Sked::SkedRecord sr(scp, random());		err = sk.push(&sr);		if (err)			g_errors++;	}	clock_t stop = eclock();	for (int k=n-1; k>=0; k--) {		if (sk.empty()) {			g_errors++;			return -1;		}		sk.pop();	}	if (!sk.empty())		g_errors++;	float fduration = (stop - start) / (float) eclock_hertz();	printf("pushpopn(%d): %f seconds\n", n, fduration);	free(sc);	return fduration;}#define N_TEST_EVENTS 200int main(int argc, char **argv){	Sked sk;	int err = sk.init();	if (err) {		printf("main: Sked::init() failed.\n");		exit(1);	}	(void) argc; (void) argv;	g_prev_when = eclock();	/* Schedule N events at random times */	SkedTestClient *sktc[N_TEST_EVENTS];	for (int i=0; i<N_TEST_EVENTS; i++) {		clock_t now = eclock() + 1 + (random() % N_TEST_EVENTS);		sktc[i] = new SkedTestClient(i, now);		if (!sktc[i]) {			printf("Test failed: can't allocate SkedTestClient\n");			exit(1);		}		//DPRINT(("main: sktc[%d] %p\n", i, sktc[i]));		sk.addClient(sktc[i], now);	}	/* Delete one tenth of the events */	int n_deleted = N_TEST_EVENTS/10;	for (int j=0; j < n_deleted; j++) {		err = sk.delClient(sktc[j + N_TEST_EVENTS/2]);		if (err) g_errors++;	}	/* Run them; callback checks if they occur when they should.  Kind of. */	while (!sk.empty()) {		if (sk.runAll(eclock())) {			printf("main: Error: runAll fails\n");			g_errors++;			break;		}	}	if (g_events != N_TEST_EVENTS-n_deleted) {		printf("main: Error:  wanted %d events, got %d actual events.\n", 				N_TEST_EVENTS-n_deleted, g_events);		g_errors++;	}	if (g_errors > 0) {		printf("Test failed, %d error(s).\n", g_errors);		exit(1);	}	printf("Sked_test: No tests failed.\n");	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -