decrement.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in ch
  6. this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  7. }
  8. var tests = [
  9. {
  10. name: "Decrement BigInt literal",
  11. body: function () {
  12. var x = 123n;
  13. assert.isTrue(x == 123n);
  14. x--;
  15. assert.isTrue(x == 122n);
  16. --x;
  17. assert.isTrue(x == 121n);
  18. }
  19. },
  20. {
  21. name: "Decrement negative BigInt literal",
  22. body: function () {
  23. var x = -123n;
  24. assert.isTrue(x == -123n);
  25. x--;
  26. assert.isTrue(x == -124n);
  27. --x;
  28. assert.isTrue(x == -125n);
  29. }
  30. },
  31. {
  32. name: "Decrement 0n",
  33. body: function () {
  34. var x = 0n;
  35. assert.isTrue(x == 0n);
  36. x--;
  37. assert.isTrue(x == -1n);
  38. --x;
  39. assert.isTrue(x == -2n);
  40. }
  41. },
  42. {
  43. name: "Decrement to change length",
  44. body: function () {
  45. var x = 4294967296n;
  46. assert.isTrue(x == 4294967296n);
  47. x--;
  48. assert.isTrue(x == 4294967295n);
  49. --x;
  50. assert.isTrue(x == 4294967294n);
  51. var y = -4294967295n;
  52. assert.isTrue(y == -4294967295n);
  53. y--;
  54. assert.isTrue(y == -4294967296n);
  55. --y;
  56. assert.isTrue(y == -4294967297n);
  57. }
  58. },
  59. {
  60. name: "Decrement BigInt Object",
  61. body: function () {
  62. var x = BigInt(12345678901234567890n);
  63. var y = BigInt(12345678901234567891n);
  64. assert.isTrue(x < y);
  65. --y;
  66. assert.isTrue(x == y);
  67. y--;
  68. assert.isTrue(x >= y);
  69. }
  70. },
  71. {
  72. name: "Out of 64 bit range",
  73. body: function () {
  74. var x = 1234567890123456789012345678901234567890n;
  75. var y = BigInt(1234567890123456789012345678901234567891n);
  76. assert.isFalse(x == y);
  77. x--;
  78. --y;
  79. assert.isTrue(x < y);
  80. --y;
  81. assert.isTrue(x == y);
  82. }
  83. },
  84. {
  85. name: "Very big",
  86. body: function () {
  87. var x = eval('1234567890'.repeat(20)+'0n');
  88. var y = BigInt(eval('1234567890'.repeat(20)+'1n'));
  89. assert.isFalse(x == y);
  90. x--;
  91. --y;
  92. assert.isTrue(x < y);
  93. --y;
  94. assert.isTrue(x == y);
  95. }
  96. },
  97. {
  98. name: "With assign",
  99. body: function () {
  100. var x = 3n;
  101. var y = x--;
  102. assert.isTrue(x == 2n);
  103. assert.isTrue(y == 3n);
  104. y = --x;
  105. assert.isTrue(x == 1n);
  106. assert.isTrue(y == 1n);
  107. }
  108. },
  109. ];
  110. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });