test.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "socketio.hpp"
  2. #include "crypt/BigInt64.hpp"
  3. #include <xoshiro.hpp>
  4. #include <iostream>
  5. #include <chrono>
  6. #include <algorithm>
  7. #include <numeric>
  8. xoshiro_256 gen(42);
  9. unsigned long long nanoTime(){
  10. using namespace std;
  11. using namespace std::chrono;
  12. return duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch()).count();
  13. }
  14. template<typename T>
  15. std::ostream& operator<<(std::ostream& out, std::vector<T> o){
  16. out << "[";
  17. for(unsigned int i = 0;i < o.size();i++){
  18. if(o[i] == '\r')continue;
  19. out << o[i];
  20. if(i < o.size() - 1)
  21. out << ", ";
  22. }
  23. return out << "]";
  24. }
  25. template<>
  26. std::ostream& operator<< <char>(std::ostream& out, std::vector<char> o){
  27. for(unsigned int i = 0;i < o.size();i++){
  28. out << o[i];
  29. }
  30. return out;
  31. }
  32. unsigned long long multTest(size_t s){
  33. BigInt a(gen,s);
  34. BigInt b(gen,s);
  35. std::vector<unsigned long long> times(0);
  36. for(int o = 0;o < 4;o++){
  37. auto t1 = nanoTime();
  38. for(int i = 0;i < 1000;i++){
  39. a = a.mult(b);
  40. a.cut(s);
  41. }
  42. auto t2 = nanoTime();
  43. times.push_back((t2 - t1));
  44. }
  45. std::sort(times.begin(), times.end());
  46. /*for(auto t : times){
  47. std::cout << t/1000 << ", ";
  48. }*/
  49. //std::cout << std::endl;
  50. return std::accumulate(times.begin(), times.end(), 0ULL);
  51. }
  52. int main(){
  53. BigInt a(~(0ULL)),b(~(0ULL));
  54. std::cout << a.mult(b).toString() << std::endl;
  55. multTest(50);
  56. multTest(100);
  57. multTest(200);
  58. std::cout << multTest(50 ) / 1000 / 1000 << " ms" << std::endl;
  59. std::cout << multTest(100) / 1000 / 1000 << " ms" << std::endl;
  60. std::cout << multTest(200) / 1000 / 1000 << " ms" << std::endl;
  61. std::cout << multTest(400) / 1000 / 1000 << " ms" << std::endl;
  62. //std::cout << multTest(800) / 1000 / 1000 << " ms" << std::endl;
  63. }
  64. /*int mian(){
  65. cppsocket sock("192.168.178.79", 80);
  66. //cppsocket sock("127.0.0.1", 80);
  67. std::vector<char> toSend(10);
  68. toSend[i] = (char)(i * i) % 10 + 'a';
  69. for(unsigned int i = 0;i < toSend.size();i++){
  70. }
  71. //std::cout << errno << std::endl;
  72. try{
  73. for(int i = 0;i < 100;i++){
  74. sock.write(toSend);
  75. std::cout << "Rec" << std::endl;
  76. std::cout << sock.receive() << std::endl;
  77. //std::this_thread::sleep_for(std::chrono::milliseconds(1));
  78. }
  79. }
  80. catch(std::exception& e){
  81. std::cout << e.what() << std::endl;
  82. }
  83. //std::cout << "Sent " << std::to_string(toSend.size()) << ", Receiving..." << std::endl;
  84. //sock.write(std::vector<char>(1,1));
  85. //std::vector<char> vec = sock.receive();
  86. //std::cout << (vec == toSend);
  87. //std::cout << vec << std::endl;
  88. //vec = sock.receive();
  89. //std::cout << vec << std::endl;
  90. return 0;
  91. }*/