статические функции являются по существу функциями помощника общественности (т.е. представленный) функции. Так IMO, Ваши модульные тесты должны назвать открытый интерфейс с исходными данными, которые осуществляют все пути в статической функции.
вывод (возвращаемые значения / побочные эффекты) государственной функции должен использоваться для тестирования эффекта помех.
Это означает, что у Вас должны быть соответствующие тупики, чтобы 'поймать' эти побочные эффекты. (например, если файл вызовов функции IO, необходимо обеспечить тупики для переопределения, они регистрируют функции lib IO). Лучший способ сделать это путем создания каждого набора тестов отдельным проектом/исполняемым файлом и постараться не связываться с любыми внешними функциями lib. Можно дразнить даже C функции, но это не стоит усилия.
Так или иначе, это - подход, который я использовал до сих пор, и он работает на меня. Удача
Похоже, это проблема, которую я решал в своем вопросе
Алгоритм для копирования N бит в произвольной позиции из одного int в другое
Есть несколько различных альтернатив, с самым быстрым было решение для сборки от fnieto.
Я считаю, что это "слишком просто" для библиотеки; большинство функций будет состоять только из одного или двух операторов, что сделало бы накладные расходы на вызов библиотечной функции немного больше, чем допускают типичные программисты на C. :)
Тем не менее, всегда превосходный glib имеет две наиболее сложные бит-ориентированные функции: g_bit_nth_lsf ()
и g_bit_nth_msf ()
. Они используются для поиска индекса первого набора битов, начиная с самого младшего или самого высокого бита соответственно.
You will come a long way with the following macros:
#define SETBITS(mem, bits) (mem) |= (bits)
#define CLEARBITS(mem, bits) (mem) &= ~(bits)
#define BIN(b7,b6,b5,b4, b3,b2,b1,b0) \
(unsigned char)( \
((b7)<<7) + ((b6)<<6) + ((b5)<<5) + ((b4)<<4) + \
((b3)<<3) + ((b2)<<2) + ((b1)<<1) + ((b0)<<0) \
)
Then you can write
int a = 0x123;
SETBITS(a, BIN(0,0,0,1, 1,1,1,0));
printf("0x%x", a); // should be 0x13F
Возможно алгоритмы из книги "FXT" (ссылка внизу страницы) будут полезны.