/**************/ /* dotests.c */ /***************************************************************************** MODULE: dotests.c PURPOSE: Yksinkertainen näyttökortin testausohjelma.s halutaan tulostaa (t) ja mahdollistaa moniajo (m). Tähän versioon on lisätty viestijonon tarkistusaliohjelma, jonka avulla pitkät piirtosilmukat saadaan keskeytetyksi ja näin "moniajo" voi jatkua. Ohjelman kirjoittajan on lisättävä piirron pitkiin silmukoihin kutsu if ( CheckMessage() ) lopetetaan_piirto; Aikoja korjataan tyhjän silmukan viemällä ajalla ja näytön tyhejnnyksen viemällä ajalla. Uuden testi lisääminen: 1) kirjoita testialiohjelma 2) lisää se Testit-taulukon alustukseen. koeta etsiä toistoarvolle määrä, jolla testi kestäisi suurinpiirtein saman kuin muutkin testit Editor: Vesa Lappalainen 25.12.1992 *****************************************************************************/ #define VERSIO "Versio 0.1 / Vesa Lappalainen 26.12.1992" #include #include #include #include #include "checker.h" #include "timer.h" #define TOISTOJA 10 #define MUSTA RGB(0,0,0) #define PUNAINEN RGB(255,0,0) static char G_tulos[10000]=""; static char G_summa[100]=""; #define VAREJA 20 typedef struct { HANDLE hInstance; HWND hWnd; int MaxX; int MaxY; int MX; int MY; long toistoja; double Raika; HBRUSH hbr[VAREJA]; HBRUSH hbrOld; HBITMAP hBitmap; } Global_tyyppi; static Global_tyyppi Global; typedef void (*Testifunktio)(HDC,int); #define TARKISTA(a,b) { int t; if ( a > b ) { t=b; b=a; a=t; } } #define RX (random(Global.MaxX)) #define RY (random(Global.MaxY)) #define RRGB RGB(random(255),random(255),random(255)) #define Rhbr Global.hbr[random(VAREJA)] #define RP RX,RY #define RR RX,RY,RX,RY /***************************************************************************/ void next_line(HDC hDC,int dy,int x, int *y,char *s) { TextOut(hDC,x,*y,s,strlen(s)); *y = (*y) + dy; } /***************************************************************************/ void tulosta_teksti(HDC hDC,int x, int y,char *s) { int dy = HIWORD(GetTextExtent(hDC,"X",1)); char *p; y += dy; do { p = strchr(s,'\n'); if ( p ) *p = 0; next_line(hDC,dy,x,&y,s); if ( p ) *p = '\n'; s = p+1; } while ( p && *s); } /***************************************************************************/ void ohjeet(HDC hDC) { tulosta_teksti(hDC,10,0, "Terve! Mittaan näyttökortin ja ohjaimen suorituskykyä.\n" "\n" "Kun testi on valmis, tulos laitetaan myös leikekirjaan,\n" "josta voit siirtää sen haluaamsi tekstinkäsittelyohjelmaan.\n" "Testin voi keskeyttää painamalla [Shift-F4]\n" "\n" "Kutsu: nayttote [lkm] [xkoko] [ykoko] [max_time]\n" "\n" " oletukset\n" " lkm = 10, xkoko = 640, ykoko = 480 ja\n" " max_time = 100 (sek/yksi testi)\n" "\n" VERSIO ); } /***************************************************************************/ #define RAND_N 60000L #define NN 10 double Rand_time(void) { long x1=0,x2=0; int i,x; double t1,t2; start_timer(1); while ( stop_timer(1) < 1 ); while ( stop_timer(1) < 3 ) { for (i=0; i= TYHJENNYS_INDEKSI) { srand(1); SendMessage(hWnd,WM_ERASEBKGND,hDC,0); tyhjennyksia++; } Testit[i].testi(hDC,Testit[i].n); /* Tämä mahdollistaa "moniajon"! */ if ( CheckMessage() ) { tulos = 1; goto pois; }; n++; aika = stop_timer(1); if ( aika > max_time ) break; } lkm = n*Testit[i].n; slkm += lkm; switch ( i ) { case TYHJA_INDEKSI: tyhja_aika = aika/lkm; kaika = aika; break; case TYHJENNYS_INDEKSI: tyhjennys_aika = (aika/(lkm+tyhjennyksia)); default: kaika = aika - (tyhja_aika*lkm + (tyhjennys_aika*tyhjennyksia)) - (Global.Raika*lkm*(Testit[i].rn-Testit[TYHJA_INDEKSI].rn)); } summa += aika; ksumma += kaika; Gtulos(tulos_teksti(Testit[i].nimi,aika,kaika,lkm)); } pois: ohjeet(hDC); strcpy(G_summa,tulos_teksti("Yhteensä",summa,ksumma,slkm)); Gtulos(G_summa); Gtulos(""); tulokset_leikekirjaan(hWnd); SetWindowText(hWnd,G_summa); tulos = ( MessageBox(hWnd,G_tulos,"Ajat: (myös leikekirjassa)",0) ) == IDCANCEL; tuhoa_varit(hDC); ReleaseDC(hWnd,hDC); return tulos; } /* ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) ==================================================================== 10 x Testi sek kpl kpl/s tyhän silmukan osuus vähennetty -------------------------------------------------------------------- Tyhjä silm. 2.97 60000 20202.0 2.970 0.000 Tyhjennys! 2.60 700 269.1 0.035 0.004 Viivat 1.09 10000 9158.7 0.494 0.004 Pisteet 2.36 40000 16958.2 1.977 0.004 Suorakaiteet 1.22 2000 1642.9 0.099 0.004 Värikaiteet 1.65 2000 1214.1 0.099 0.004 Ellipsit 3.33 250 75.0 0.012 0.004 Väriellipsit 3.07 140 45.6 0.007 0.004 Tekstit 1.05 2000 1909.6 0.099 0.004 Bittikartta 2.74 200 73.1 0.010 0.004 Zoomkartta 4.67 10 2.1 0.000 0.004 Yhteensä 26.74 117300 4386.8 0.000 0.000 ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) ==================================================================== 10 x Testi sek kpl kpl/s -------------------------------------------------------------------- Tyhjä silm. 3.0 60000 19867.5 Tyhjennys! 2.6 700 270.2 Viivat 1.1 10000 8744.8 Pisteet 3.1 40000 12922.3 Suorakaiteet 1.1 2000 1808.8 Värikaiteet 1.5 2000 1337.2 Ellipsit 2.7 250 93.5 Väriellipsit 2.7 140 52.3 Tekstit 1.0 2000 1912.6 Bittikartta 3.6 200 56.2 Zoomkartta 4.7 10 2.1 Yhteensä 27.1 117300 4323.3 ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) Koko: 200x200 ==================================================================== 10 x Testi sek kpl kpl/s -------------------------------------------------------------------- Tyhjä silm. 2.9 60000 20979.0 Tyhjennys! 0.4 700 1724.1 Viivat 1.2 10000 8177.9 Pisteet 3.1 40000 12726.2 Suorakaiteet 0.4 2000 4949.8 Värikaiteet 0.6 2000 3257.0 Ellipsit 1.0 250 241.0 Väriellipsit 1.0 140 143.9 Tekstit 1.1 2000 1879.6 Bittikartta 0.6 200 339.1 Zoomkartta 1.6 10 6.3 Yhteensä 13.9 117300 8437.0 ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) Koko: 640x480 ==================================================================== 100 x Testi sek kor kpl kpl/s -------------------------------------------------------------------- Tyhjä silm. 3.2 3.2 66000 20370.4 Tyhjennys! 3.2 3.1 840 267.4 Viivat 3.0 2.1 19000 9126.4 Pisteet 3.1 1.9 24000 12693.1 Pisteet,ohi 3.1 0.4 56000 147461.2 Suorakaiteet 3.1 2.8 5200 1847.9 Värikaiteet 3.1 2.9 3800 1321.1 Ellipsit 3.0 3.0 275 91.7 Väriellipsit 3.0 3.0 154 51.2 Tekstit 3.1 2.8 5400 1925.7 Bittikartta 3.2 3.2 180 55.8 Zoomkartta 3.4 3.4 7 2.1 Yhteensä 37.6 31.9 180856 5677.4 ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) Koko: 640x480 ==================================================================== 100 x Testi sek kor kpl kpl/s -------------------------------------------------------------------- Tyhjä silm. 3.1 3.1 66000 21086.3 Tyhjennys! 3.2 3.2 840 264.1 Viivat 3.0 1.2 19000 15250.3 Pisteet 3.1 1.9 24000 12366.1 Pisteet,ohi 3.2 0.5 56000 107055.3 Suorakaiteet 3.1 2.6 5200 2011.5 Värikaiteet 3.1 2.6 3800 1449.1 Ellipsit 3.0 3.0 275 92.1 Väriellipsit 3.1 3.1 154 50.4 Tekstit 3.1 2.8 5400 1919.5 Bittikartta 3.2 3.2 180 55.8 Zoomkartta 3.3 3.3 7 2.1 Yhteensä 37.5 30.7 180856 5899.4 ==================================================================== Fahrenheit Enhanced VGA (Small Fonts) Koko: 640x480 rand: 43882/s ==================================================================== 1000 x Testi sek kor kpl kpl/s -------------------------------------------------------------------- Tyhjä silm. 30.2 30.2 660000 21890.5 Pisteet,ohi 30.2 5.2 548000 105865.8 Tyhjennys! 30.3 30.2 7980 264.0 Viivat 30.1 12.5 192000 15356.8 Pisteet 30.3 19.5 236000 12129.7 Suorakaiteet 30.1 25.4 50600 1993.4 Värikaiteet 30.0 25.7 37200 1446.0 Ellipsit 30.2 29.9 2750 92.1 Väriellipsit 30.2 29.9 1540 51.4 Tekstit 30.0 27.5 52800 1917.5 Bittikartta 30.3 30.2 1680 55.6 Zoomkartta 30.5 30.5 64 2.1 Yhteensä 362.3 296.6 1790614 6036.8 */