diff --git a/packages/a11y/index.ts b/packages/a11y/index.ts index 4d9fc0fcf..e9b47505c 100644 --- a/packages/a11y/index.ts +++ b/packages/a11y/index.ts @@ -1,8 +1,10 @@ -import { Context, UserModel } from 'hydrooj'; +import { Context, Schema, UserModel } from 'hydrooj'; +import { startPerformanceTest } from './performance-test'; export async function apply(ctx: Context) { // Auto authorize user 2 as super admin ctx.on('handler/after/UserRegisterWithCode#post', async (that) => { if (that.session.uid === 2) await UserModel.setSuperAdmin(2); }); + ctx.addScript('performance-test', 'test', Schema.object({}), startPerformanceTest); } diff --git a/packages/a11y/performance-test.ts b/packages/a11y/performance-test.ts new file mode 100644 index 000000000..d95b98e1d --- /dev/null +++ b/packages/a11y/performance-test.ts @@ -0,0 +1,252 @@ +/* eslint-disable no-await-in-loop */ +import { + ProblemModel, RecordModel, sleep, STATUS, yaml, +} from 'hydrooj'; + +const TESTS = { + 'test1': `//Test 1 +#include + +using namespace std; + +int main(){ + int a=1000000000,b=1; + while(a)b<<=1,a--; + printf("%d\\n",b); + return 0; +}`, + 'test2': `//Test 2 +#include + +using namespace std; +const int MX=50000000; +int p[MX],m[MX],pc; +int main(){ + for(int i=2;i + +using namespace std; +const int MX=1000; +int G[MX][MX]; +int sed=0; +inline int rand(){return sed=(sed*sed*73+sed*233+19260817)&0x0000ffff;} +int main(){ + for(int i=0;iG[j][i]+G[i][k])G[j][k]=G[j][i]+G[i][k]; + int ans=0; + for(int i=0;i +#include +#include + +using namespace std; + +const int MX=1000000; +int sed=0; +inline int rand(){return sed=(sed*sed*73+sed*233+19260817);} +int main(){ + setS; + for(int i=0;i::iterator it=S.begin();it!=S.end();it++)ans^=*it; + printf("%d\\n",ans); + return 0; +}`, + 'test6-1': `//Test 6-1 +#include + +using namespace std; +const int MX=1<<25; +int a[MX]; + +inline unsigned int rand(){static unsigned int sed=0;return (sed=(sed*233+19260421))&(MX-1);} + +int main(){ + for(int i=0;i + +using namespace std; +const int MX=1<<25; +int a[MX]; + +inline unsigned int rand(){static unsigned int sed=0;return (sed=(sed*(MX+1)+1025))&(MX-1);} + +int main(){ + for(int i=0;i + +using namespace std; +const int MX=1<<25; +int a[MX]; + +inline unsigned int rand(){static unsigned int sed=0;return (sed=(sed*(MX+1)+1))&(MX-1);} + +int main(){ + for(int i=0;i + +using namespace std; +typedef unsigned long long ull; + +#define P 1000000007 +const int MX=100000000; + +int main(){ + ull ans=1; + for(int i=1;i + +using namespace std; +typedef unsigned long long ull; + +int P=1000000007; +const int MX=100000000; + +int main(){ + ull ans=1; + for(int i=1;i + +using namespace std; + +const int MX=20000000; + +int main(){ + double ans=0.61234567898765,t=1,s=0; + for(int i=1;i + +using namespace std; +typedef unsigned int uint; + +const int MX=1<<10; +uint a[MX][MX],b[MX][MX]; + +inline uint rand(){static unsigned int sed=0;return (sed=(sed*233+19260421))&(MX-1);} + +int main(){ + register int i,j,k; + for(i=0;i + +using namespace std; +typedef unsigned int uint; + +const int MX=1<<10; +uint a[MX][MX],b[MX][MX]; + +inline uint rand(){static unsigned int sed=0;return (sed=(sed*233+19260421))&(MX-1);} + +int main(){ + register int i,j,k; + for(i=0;i { + const id = await RecordModel.add('system', docId, 1, 'cc.cc14o2', TESTS[key], true); + while ([ + STATUS.STATUS_WAITING, STATUS.STATUS_JUDGING, STATUS.STATUS_FETCHED, STATUS.STATUS_COMPILING, + ].includes((await RecordModel.get('system', id))?.status)) { + await sleep(500); + } + const result = await RecordModel.get('system', id); + if (result.status !== STATUS.STATUS_ACCEPTED && result.status !== STATUS.STATUS_WRONG_ANSWER) { + report({ message: `Test ${key} failed (${id}) ${result.status}` }); + } + const timeArr = result.testCases.map((i) => i.time); + const avgTime = Math.sum(...timeArr) / 20; + report({ message: '' }); + report({ message: `Test ${key} Avg: ${Math.floor(avgTime)}` }); + report({ message: `Max: ${Math.floor(Math.max(...timeArr))} / Min: ${Math.floor(Math.min(...timeArr))}` }); + report({ message: `Variance: ${Math.floor(Math.sum(...timeArr.map((i) => (i - avgTime) ** 2)) / 20)}` }); + report({ message: '' }); + })); + return true; +}