[Wine-devel] Замечания по eterforcetest

Vitaly Lipatov lav на etersoft.ru
Ср Фев 23 15:35:24 MSK 2011


http://git.etersoft.ru/people/grosso/packages/timetests.git

Репозиторий называется неправильно. Надо опубликовать с оригинальным 
названием.

> diff --git a/Makefile b/Makefile
> index fc587a3..9fe5d2b 100644 (file)
> --- a/Makefile
> +++ b/Makefile
> @@ -4,11 +4,11 @@ PUBDIR=/var/ftp/pub/Etersoft/Eterforcetest
> 
>  CFLAGS+=-Wall -O0 -g -Werror
>  LDFLAGS=
> 
> -LIBADD=-lgdi32 -lole32 $(MINGWLIBDIR)/libuuid.a
> +LIBADD=-lgdi32 -lole32 $(MINGWLIBDIR)
Зачем удалил?

Надо читать коммиты, что в них нет лишнего.

> +#include <conio.h>
Вряд ли нужно

> +/*
> + *Search file function
Бессмысленный комментарий. Нужно писать, не что делает, а как делает.

> + */
> +BOOL SearchFiles(LPCTSTR lpszFileName, LPSEARCHFUNC lpSearchFunc, BOOL
> bInnerFolders) +{
> +    LPTSTR part;
> +    char tmp[MAX_PATH];
> +    char name[MAX_PATH];
> +
> +    HANDLE hSearch = NULL;
> +    WIN32_FIND_DATA wfd;
> +    memset(&wfd, 0, sizeof(WIN32_FIND_DATA));
> +
> +    if(bInnerFolders)
> +    {
> +        if(GetFullPathName(lpszFileName, MAX_PATH, tmp, &part) == 0)
> return FALSE; 
> +        strcpy(name, part);
> +        strcpy(part, "*.*");
Какое-то сомнительное копирование. А ты сам функцию писал или откуда-то?

> +/*
> + *Change reg
> + */
> +void get_big(char *a)
> +{
> +               int len_a = 25;
> +               int len_b = 10;
> +               int i;
> +               for(i = len_b; i<len_a -6; i++)
> +               {
> +                               if((int)a[i]<=95)
> +                                       a[i] = (int)a[i]+32;
> +                               else
> +                                       a[i] = (int)a[i]-32;
> +               }
> +}
Не понимаю, что делает эта функция. Думаю, она не нужна.


> +/*
> + *Generate File Name (use 4 formats)
> + *Generate search mask
> + */
> +void GenerateFileName(char *a, char *b, char *c)
> +{
> +       char format1[5] = {'.', 't', 'x', 't', 0};
> +       char format2[5] = {'.', 'm', 'k', 'w', 0};
> +       char format3[5] = {'.', 'c', 'p', 'p', 0};
> +       char format4[5] = {'.', 'd', 'o', 'k', 0};
Разные расширения — лишнее.

> +       char mask[3]={'.', '*', 0};
Не надо использовать W-функции, и не придётся так строки записывать.

> +       int len_a = 25;
> +       int len_b = 10;
> +       int len_c = 12;
не должно быть констант.

> +       int buf = 0;
buf не может иметь тип int

> +       int i;
> +       int form  = 0;
> +       strcpy( a, b);
> +       a[len_b-1]='/';
> +       buf = rand() % 2 + 0;
> +       if( buf == 0)
> +       {
> +       for ( i = len_b; i<len_a-6; i++)
> +               {
> +                       a[i] = rand() % 26 + 65;   //mean "A" - "Z"
Тут нужно было написать хотя бы rand()%('Z'-'A') + 'A'

> +                       c[i-(len_b)] = a[i];
> +               }
> +       }
> +       else
> +       {
> +               for ( i = len_b; i<len_a-6; i++)
> +               {
> +                       a[i] = rand() % 26 + 97;   //mean "a" - "z"
> +                       c[i-(len_b)] = a[i];
> +               }
> +       }
Второй раз ту же конструкцию писать не стоит. Допустим, константы надо просто 
задать снаружи цикла и убрать условие с buf.


> +void test_stat()
> +{
> +       printf("\n\n\n\n Runing stat test  ");
> +       FILE *hFile;           //for create files
> +       int hFile1 = 0;        //for get file informatioun]
Переменные, которые используются только внутри какого-то блока, стоит там и 
объявлять, сокращая им область видимости.

> +       char fn[25];           //file which we wont known
> +       SYSTEMTIME st;
> +       struct stat BufInfo;   //contain file information
> +       char name_dir[10] = { 'c', 'o', 'n', 't', 'a', 'i', 'n', 'e', 'r',
Опять же. не надо W-функций и таких строк.

> 0};     //name dir +       char mas[25];             //contain files name
> +       char search[12];          //contain masck (need for search)
> +       int i;
> +       char mass_name_of_files[1000][25];   //use for delet files
Для размера буфера пути к файлу есть константа

> +       int dum = 0;
> +       srand ( time(NULL) );
> +       GetLocalTime(&st);
Зачем?

> +       /*
> +       *Create new directroy which contain files
> +       */
> +       if(CreateDirectory(name_dir,NULL))
Странно, как это работало...

> +       {
> +               printf("\nDirectory was create...");
> +       }
> +       for(i=0;i<1000;i++)
Думаю, что 1000 файлов — мало. Лучше 10000 тыс.

> +       {
> +               GenerateFileName(mas, name_dir, search);
> +               strcpy(mass_name_of_files[i],mas);
> +               hFile = CreateFile(mas, GENERIC_WRITE, FILE_SHARE_READ,
> NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); +              
> CloseHandle(hFile);
> +               dum++;
> +       }
> +       printf("\n%d Files was create...", dum);
Вряд ли нужно считать dum и выводить

> +       printf("\nYou searching  %s ", search);
> +       SearchFiles(search, DoSomething, TRUE);
Боюсь, что функция не понадобится.

> +       printf("\n\tfstat() for \t\n  %s ", mas);
Лишний вывод

> +       hFile1 = open(mas, O_RDONLY);
И что тут в mas?

> +       MSTART(1, "fstat", 20)
> +       {
> +               fstat(hFile1, &BufInfo);
> +       }MEND
Давай для однотипности тут использовать CreateFile.
Вообще суть была в том, чтобы сравнить время открытия файла.
Так что внутрь MSTART стоит разместить CreateFile и всё.
И, конечно, количество циклов не должно быть 20. Видимо, какие-то десятки 
тысяч. Так, чтобы измерение проходило секунд 10.

> +       close(hFile1);
> +       hFile1 = open(fn, O_RDONLY);
> +       get_big(mas);
Что тут изменилось?
Тест должен позволять сравнить скорость поиска файла при совпадении регистра с 
реальным (на файловом системе) и при несовпадении.
Видимо, поиск надо выполнять для всех созданных файлов.

> +       printf("\n\tfstat() for \t\n  %s ", mas);
> +       hFile1 = open(mas, O_RDONLY);
> +       MSTART(1, "fstat", 20)
> +       {
> +               fstat(hFile1, &BufInfo);
> +       }MEND
> +       close(hFile1);
> +       for(i=0;i<1000;i++)
Константу задать через define

> +       {
> +               DeleteFile(mass_name_of_files[i]);
> +       }
> +       RemoveDirectory(name_dir);
> +       printf("\n Remove all files and directory was complite.\n");
complete
Вообще сообщения стоит выводить только в случае неудачи.
То есть надо проверять результат выполнения функции.

> +       printf("\n ...Test was completed... \n");
> +}
-- 
С уважением,
Виталий Липатов
Россия, Санкт-Петербург. www.etersoft.ru
GNU! ALT Linux Team! WINE! WIKI! LaTeX! LyX!


Подробная информация о списке рассылки Wine-devel