test-bitvector.nut 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. auto bv_size = 800000;
  2. auto step = 1;
  3. auto sqBitVect = blob((bv_size / 8) + 512);
  4. //sqBitVect.memset(0, 0, sqBitVect.len()-1);
  5. auto bitGet(bpos)
  6. {
  7. auto cpos = bpos/8;
  8. auto b8 = 1 << (bpos%8);
  9. return sqBitVect[cpos] & b8;
  10. }
  11. auto bitSet(bpos)
  12. {
  13. auto cpos = bpos/8;
  14. auto b8 = 1 << (bpos%8);
  15. sqBitVect[cpos] = sqBitVect[cpos] | b8;
  16. }
  17. auto bitClear(bpos)
  18. {
  19. auto cpos = bpos/8;
  20. auto b8 = 1 << (bpos%8);
  21. sqBitVect[cpos] = sqBitVect[cpos] & (~b8);
  22. }
  23. auto bitTogle(bpos)
  24. {
  25. auto cpos = bpos/8;
  26. auto b8 = 1 << (bpos%8);
  27. sqBitVect[cpos] = sqBitVect[cpos] ^ b8;
  28. }
  29. auto bit_pos = 3;
  30. auto cpos = bit_pos/8;
  31. auto m8 = (bit_pos%8);
  32. auto b8 = 1 << m8;
  33. print(bit_pos, cpos, m8, b8);
  34. print(bitGet(bit_pos));
  35. bitSet(bit_pos);
  36. print(bitGet(bit_pos));
  37. bitClear(bit_pos);
  38. print(bitGet(bit_pos));
  39. bitTogle(bit_pos);
  40. print(bitGet(bit_pos));
  41. print("===");
  42. ++bit_pos;
  43. print(sqBitVect.bitGet(bit_pos));
  44. sqBitVect.bitSet(bit_pos);
  45. print(sqBitVect.bitGet(bit_pos));
  46. sqBitVect.bitClear(bit_pos);
  47. print(sqBitVect.bitGet(bit_pos));
  48. sqBitVect.bitTogle(bit_pos);
  49. print(sqBitVect.bitGet(bit_pos));
  50. //return;
  51. //BitVector is 1 based
  52. auto bv = BitVector(bv_size);
  53. print(bv);
  54. auto start_milli = os.getmillicount();
  55. for(auto i=1; i <= bv_size; i+=step) bv.set(i);
  56. print("Time spent set bv", os.getmillicount() - start_milli);
  57. start_milli = os.getmillicount();
  58. for(auto i=1; i <= bv_size; i+=step) bv.test(i);
  59. print("Time spent get bv", os.getmillicount() - start_milli);
  60. start_milli = os.getmillicount();
  61. for(auto i=0; i < bv_size; i+=step) bitSet(i);
  62. print("Time spent set sq", os.getmillicount() - start_milli);
  63. start_milli = os.getmillicount();
  64. for(auto i=0; i < bv_size; i+=step) bitGet(i);
  65. print("Time spent get sq", os.getmillicount() - start_milli);
  66. start_milli = os.getmillicount();
  67. for(auto i=0; i < bv_size; i+=step) sqBitVect.bitSet(i);
  68. print("Time spent set blob", os.getmillicount() - start_milli);
  69. start_milli = os.getmillicount();
  70. for(auto i=0; i < bv_size; i+=step) sqBitVect.bitGet(i);
  71. print("Time spent get blob", os.getmillicount() - start_milli);
  72. start_milli = os.getmillicount();
  73. auto cbitSet = sqBitVect.bitSet;
  74. auto cbitGet = sqBitVect.bitGet;
  75. for(auto i=0; i < bv_size; i+=step) rawcall(cbitSet, sqBitVect, i);
  76. print("Time spent set rawcall blob", os.getmillicount() - start_milli);
  77. start_milli = os.getmillicount();
  78. for(auto i=0; i < bv_size; i+=step) rawcall(cbitGet, sqBitVect, i);
  79. print("Time spent get rawcall blob", os.getmillicount() - start_milli);
  80. start_milli = os.getmillicount();
  81. cbitSet = BitVector.set;
  82. cbitGet = BitVector.test;
  83. print(cbitSet, cbitGet);
  84. //bv = BitVector(bv_size);
  85. for(auto i=1; i <= bv_size; i+=step) rawcall(cbitSet, bv, i);
  86. print("Time spent set rawcall bv", os.getmillicount() - start_milli);
  87. start_milli = os.getmillicount();
  88. for(auto i=1; i <= bv_size; i+=step) rawcall(cbitGet, bv, i);
  89. print("Time spent get rawcall bv", os.getmillicount() - start_milli);
  90. bv = array(bv_size);
  91. start_milli = os.getmillicount();
  92. for(auto i=0; i < bv_size; i+=step) bv[i] = true;
  93. print("Time spent set array", os.getmillicount() - start_milli);
  94. start_milli = os.getmillicount();
  95. for(auto i=0; i < bv_size; i+=step) bv[i];
  96. print("Time spent get array", os.getmillicount() - start_milli);