multiply.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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: "BigInt literal",
  11. body: function () {
  12. assert.isTrue(1n*2n == 2n);
  13. assert.isTrue(2n*1n == 2n);
  14. }
  15. },
  16. {
  17. name: "change length",
  18. body: function () {
  19. assert.isTrue(4294967295n * 2n == 8589934590n);
  20. assert.isTrue(123n * 18446744073709551615n == 2268949521066274848645n);
  21. }
  22. },
  23. {
  24. name: "Out of 64 bit range",
  25. body: function () {
  26. var x = 1234567890123456789012345678901234567890n;
  27. var y = BigInt(6172839450617283945061728394506172839450n);
  28. assert.isTrue(x * 5n == y);
  29. }
  30. },
  31. {
  32. name: "Very big",
  33. body: function () {
  34. var x = eval('1234567890'.repeat(20)+'0n');
  35. var y = BigInt(eval('1234567890'.repeat(20)+'7n'));
  36. assert.isTrue(x*y == 15241578753238836750495351562566681945008382873376009755225118122311263526910001524158887669562677518670946627038562550221003043773814983252552966212772443410028959019878067369875323883776284103056504141139485896967159837982037108626735823345526793582838000483112332160794086427327693963857597928498242646061072549927232083524835691205694817405890606569121173139765328562261853981054717510588324962300n);
  37. }
  38. },
  39. {
  40. name: "With signed number",
  41. body: function () {
  42. assert.isTrue(-3n * 4n == -12n);
  43. assert.isTrue(3n * -4n == -12n);
  44. assert.isTrue(-3n * -4n == 12n);
  45. assert.isTrue(-1n * 1n == -1n);
  46. }
  47. },
  48. {
  49. name: "With zero",
  50. body: function () {
  51. assert.isTrue(-4n * 0n == 0n);
  52. assert.isTrue(4n * 0n == 0n);
  53. assert.isTrue(0n * 4n == 0n);
  54. assert.isTrue(0n * -4n == 0n);
  55. }
  56. },
  57. {
  58. name: "With assign",
  59. body: function () {
  60. var x = 3n;
  61. var y = 2n;
  62. y *= x;
  63. assert.isTrue(x == 3n);
  64. assert.isTrue(y == 6n);
  65. y = x * 4n;
  66. assert.isTrue(y == 12n);
  67. y = 8n * x;
  68. assert.isTrue(y == 24n);
  69. }
  70. },
  71. ];
  72. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });