test.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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(gen, 2);
  54. BigInt b(gen, 2);
  55. std::cout << a.toString() << " " << b.toString() << std::endl;
  56. a = a.mult(b);
  57. std::cout << a.toString() << std::endl;
  58. multTest(50);
  59. multTest(100);
  60. multTest(200);
  61. std::cout << multTest(50 ) / 1000 / 1000 << " ms" << std::endl;
  62. std::cout << multTest(100) / 1000 / 1000 << " ms" << std::endl;
  63. std::cout << multTest(200) / 1000 / 1000 << " ms" << std::endl;
  64. std::cout << multTest(400) / 1000 / 1000 << " ms" << std::endl;
  65. //std::cout << multTest(800) / 1000 / 1000 << " ms" << std::endl;
  66. }
  67. /*int mian(){
  68. cppsocket sock("192.168.178.79", 80);
  69. //cppsocket sock("127.0.0.1", 80);
  70. std::vector<char> toSend(10);
  71. toSend[i] = (char)(i * i) % 10 + 'a';
  72. for(unsigned int i = 0;i < toSend.size();i++){
  73. }
  74. //std::cout << errno << std::endl;
  75. try{
  76. for(int i = 0;i < 100;i++){
  77. sock.write(toSend);
  78. std::cout << "Rec" << std::endl;
  79. std::cout << sock.receive() << std::endl;
  80. //std::this_thread::sleep_for(std::chrono::milliseconds(1));
  81. }
  82. }
  83. catch(std::exception& e){
  84. std::cout << e.what() << std::endl;
  85. }
  86. //std::cout << "Sent " << std::to_string(toSend.size()) << ", Receiving..." << std::endl;
  87. //sock.write(std::vector<char>(1,1));
  88. //std::vector<char> vec = sock.receive();
  89. //std::cout << (vec == toSend);
  90. //std::cout << vec << std::endl;
  91. //vec = sock.receive();
  92. //std::cout << vec << std::endl;
  93. return 0;
  94. }*/