Mcucpp

Форк
0
/
DivTest.cpp 
70 строк · 1.7 Кб
1
#include <gtest\gtest.h>
2
#include <div.h>
3
#include <fastdiv10.h>
4
#include <fstream>
5
#include <cstdlib>
6

7
void GenerateTestUnsigned64x32()
8
{
9
	std::ofstream file("div64x32uTests.h", std::ios::out);
10
	int testCount = 1000;
11
	for(int i=0; i<testCount; i++)
12
	{
13
		uint64_t u = (uint64_t)rand() ^ ((uint64_t)rand() << 16) ^ ((uint64_t)rand() << 32);
14
		uint32_t v = (uint32_t)rand() ^ ((uint32_t)rand() << 16);
15
		uint32_t q = (uint32_t)(u / v);
16
		file << "EXPECT_EQ(" << q << "ul, div64x32u(" << u << "ull, " << v << "ul, 0) );" << std::endl;
17
	}
18
}
19

20
TEST(Div, Test64x32unsigned)
21
{
22
	//GenerateTestUnsigned64x32();
23
	#include "div64x32uTests.h"
24
}
25

26
void GenerateTestSigned64x32()
27
{
28
	std::ofstream file("div64x32sTests.h", std::ios::out);
29
	int testCount = 1000;
30
	for(int i=0; i<testCount; i++)
31
	{
32
		int64_t u = (int64_t)rand() ^ ((int64_t)rand() << 16) ^ ((int64_t)rand() << 32);
33
		int32_t v = (int32_t)rand() ^ ((int32_t)rand() << 16);
34
		if(rand() & 1)
35
			u *= -1;
36
		if(rand() & 1)
37
			v *= -1;
38
		int32_t q = (int32_t)(u / v);
39
		file << "EXPECT_EQ(" << q << "l, div64x32s(" << u << "ll, " << v << "l, 0) );" << std::endl;
40
	}
41
}
42

43
TEST(Div, Test64x32signed)
44
{
45
	//GenerateTestSigned64x32();
46
	#include "div64x32sTests.h"
47
}
48

49
TEST(Div10, FastDiv10)
50
{
51
	using namespace Mcucpp;
52
	for(uint32_t i = 0; i < 256; i++)
53
	{
54
		divmod10_t<uint8_t> res8 = divmodu10((uint8_t)i);
55
		EXPECT_EQ(i/10, res8.quot);
56
		EXPECT_EQ(i%10, res8.rem);
57
	}
58

59
	for(uint32_t i = 0; i < 0x00010000; i++)
60
	{
61
		divmod10_t<uint16_t> res16 = divmodu10((uint16_t)i);
62
		EXPECT_EQ(i/10, res16.quot);
63
		EXPECT_EQ(i%10, res16.rem);
64
	}
65

66
	divmodu10((unsigned)100);
67
	divmodu10((unsigned long)100);
68
	divmodu10((unsigned short)100);
69
	divmodu10((unsigned long long)100);
70
}
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.