Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. #include "gtest/gtest.h"
  2. #include <cmath>
  3.  
  4. extern "C" int32_t BitCount(uint64_t n);
  5. extern "C" int64_t Factorial(int32_t n);
  6. extern "C" bool IsSquare(int64_t x);
  7. extern "C" int32_t RemoveDigits(int32_t x);
  8. extern "C" int64_t Formula(int64_t x, int64_t n);
  9. extern "C" uint64_t BankDeposit(
  10. uint64_t initial_sum, int32_t percentage, int32_t years);
  11. extern "C" uint16_t Switch(uint16_t n);
  12. extern "C" uint64_t InfiniteManipulations(uint64_t x);
  13.  
  14. // ---------------------------------------------------------
  15.  
  16. namespace {
  17. int32_t OurBitCiount(uint64_t n) {
  18. int32_t ans = 0;
  19. while (n != 0) {
  20. ans += n & 1u;
  21. n /= 2;
  22. }
  23. return ans;
  24. }
  25.  
  26. int64_t OurFactorial(int32_t n) {
  27. int64_t ans = 1;
  28. int64_t step = 1;
  29. while (ans <= n) {
  30. ans *= step;
  31. step++;
  32. }
  33. return ans;
  34. }
  35.  
  36. int32_t OurRemoveDigits(int32_t x) {
  37. int mn = 1;
  38. int ans = 0;
  39. while (x != 0) {
  40. if ((x % 10) % 2 != 0) {
  41. ans += mn * (x % 10);
  42. mn *= 10;
  43. }
  44. x /= 10;
  45. }
  46. return ans;
  47. }
  48.  
  49. uint64_t OurBankDeposit(uint64_t initial_sum,
  50. int32_t percentage,
  51. int32_t years) {
  52. for (int i = 0; i < years; i++) {
  53. initial_sum = initial_sum * (100 + percentage) / 100;
  54. }
  55. return initial_sum;
  56. }
  57.  
  58. uint16_t OurSwitch(uint16_t n) {
  59. uint16_t ans = 0;
  60. for (int i = 1; i < n; i++) {
  61. if (n % i == n / i) {
  62. ans++;
  63. }
  64. }
  65. return ans;
  66. }
  67.  
  68. uint64_t OurInfiniteManipulations(uint64_t x) {
  69. uint64_t t = OurBitCiount(x);
  70. uint64_t f = (1 << t) - 1;
  71.  
  72. uint64_t a = 0;
  73. do {
  74. a++;
  75. x /= 2;
  76. } while (x != 0);
  77.  
  78. uint64_t s = f << (a - t);
  79. return s - f;
  80. }
  81. }
  82.  
  83. TEST(BitCount, Simple) {
  84. for (uint32_t i = 0; i < 100000000; i++) {
  85. if (BitCount(i) != OurBitCiount(i)) {
  86. std::cerr << i;
  87. }
  88. ASSERT_EQ(BitCount(i), OurBitCiount(i));
  89. }
  90. }
  91.  
  92. TEST(Factorial, Simple) {
  93. for (int32_t i = 0; i < 100000000; i++) {
  94. ASSERT_EQ(Factorial(i), OurFactorial(i));
  95. }
  96. }
  97.  
  98. TEST(IsSquare, Simple) {
  99. for (int i = 0; i < 10000000; i++) {
  100. int t = std::sqrt(i);
  101. if ((t * t == i) != IsSquare(i)) {
  102. std::cerr << i;
  103. }
  104. ASSERT_EQ(t * t == i, IsSquare(i));
  105. }
  106. }
  107.  
  108. TEST(RemoveDigits, Simple) {
  109. for (int i = -10000000; i < 10000000; i++) {
  110. if (OurRemoveDigits(i) != RemoveDigits(i)) {
  111. std::cerr << i;
  112. }
  113. ASSERT_EQ(OurRemoveDigits(i), RemoveDigits(i));
  114. }
  115. }
  116.  
  117. TEST(Formula, Simple) {
  118. EXPECT_EQ(15, Formula(17, 1));
  119. EXPECT_EQ(3870, Formula(17, 2));
  120. EXPECT_EQ(-1, Formula(1000, 100));
  121. }
  122.  
  123. TEST(BankDeposit, Simple) {
  124. for (int i = 0; i < 300; i++) {
  125. for (int j = 0; j < 300; j++) {
  126. for (int z = 0; z < 23; z++) {
  127. if (OurBankDeposit(i, j, z) != BankDeposit(i, j, z)) {
  128. std::cerr << i << " " << j << " " << z << '\n';
  129. }
  130. ASSERT_EQ(OurBankDeposit(i, j, z), BankDeposit(i, j, z));
  131. }
  132. }
  133. }
  134. }
  135.  
  136. TEST(Switch, Simple) {
  137. for (int i = 1; i <= UINT16_MAX; i++) {
  138. ASSERT_EQ(OurSwitch(i), Switch(i));
  139. }
  140. }
  141.  
  142. TEST(InfiniteManipulations, Simple) {
  143. for (int i = 1; i <= 100000000; i++) {
  144. ASSERT_EQ(OurInfiniteManipulations(i), InfiniteManipulations(i));
  145. }
  146. }
  147.  
  148. // ---------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement