set.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var RTL$ = {
  2. makeSet: function (/*...*/){
  3. var result = 0;
  4. function checkBit(b){
  5. if (b < 0 || b > 31)
  6. throw new Error("integes between 0 and 31 expected, got " + b);
  7. }
  8. function setBit(b){
  9. checkBit(b);
  10. result |= 1 << b;
  11. }
  12. for(var i = 0; i < arguments.length; ++i){
  13. var b = arguments[i];
  14. if (b instanceof Array){
  15. var from = b[0];
  16. var to = b[1];
  17. if (from < to)
  18. throw new Error("invalid SET diapason: " + from + ".." + to);
  19. for(var bi = from; bi <= to; ++bi)
  20. setBit(bi);
  21. }
  22. else
  23. setBit(b);
  24. }
  25. return result;
  26. },
  27. setInclL: function (l, r){return (l & r) == l;},
  28. setInclR: function (l, r){return (l & r) == r;}
  29. };
  30. var m = function (){
  31. var ci = 3;
  32. var cs1 = 2 | 4;
  33. var cs2 = 14 & ~18;
  34. var cs3 = 14 & 18;
  35. var cs4 = 14 ^ 18;
  36. var cs5 = ~2;
  37. var s1 = 0;var s2 = 0;
  38. var i1 = 0;
  39. var b = false;
  40. function getSet1(){
  41. return 2;
  42. }
  43. function getSet2(){
  44. return 4;
  45. }
  46. s1 = 0;
  47. s1 = 61;
  48. s1 = 8;
  49. s1 = 64;
  50. i1 = 3;
  51. s2 = RTL$.makeSet(i1, i1 + 2, [10 - i1, 15]);
  52. s2 = RTL$.makeSet(i1) | 4;
  53. b = 1 << i1 & s1;
  54. b = RTL$.setInclL(s1, s2);
  55. b = RTL$.setInclR(s1, s2);
  56. b = RTL$.setInclL(getSet1(), getSet2());
  57. b = RTL$.setInclR(getSet1(), getSet2());
  58. b = RTL$.setInclL(cs1, cs2);
  59. b = RTL$.setInclR(cs1, cs2);
  60. b = RTL$.setInclL(cs1 | cs2, cs1 | cs2);
  61. b = RTL$.setInclR(cs1 | cs2, cs2 | cs1);
  62. b = RTL$.setInclL(2 | 4, 2 | 4);
  63. b = RTL$.setInclR(2 | 4, 4 | 2);
  64. b = s1 == s2;
  65. b = s1 != s2;
  66. s1 = s1 | s2;
  67. s1 = s1 & ~s2;
  68. s1 = s1 & s2;
  69. s1 = s1 ^ s2;
  70. s1 = ~s2;
  71. s2 |= 1 << 3;
  72. s1 |= 1 << ci * 2 + 3;
  73. s1 |= 1 << ci * 2 - i1 + 3;
  74. s1 |= 1 << (b ? 1 : 0);
  75. s2 &= ~(1 << 3);
  76. s2 &= ~(1 << (b ? 1 : 0));
  77. }();