SpliceBtreeMemoryCorruption.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. //Note: see function ArraySpliceHelper of JavascriptArray.cpp
  6. if (this.WScript && this.WScript.LoadScriptFile) { // Check for running in ch
  7. this.WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  8. }
  9. var Debug = false;
  10. function print(aVal)
  11. {
  12. if(Debug)
  13. {
  14. WScript.Echo(aVal);
  15. }
  16. }
  17. var tests = [
  18. {
  19. name: "Float Splice Test",
  20. body: function ()
  21. {
  22. var FloatArr0 = [9.2];
  23. var b = -9;
  24. FloatArr0[8] = 1;
  25. var v5432 = FloatArr0.splice(b); // By definition of Splice, this should make FloatArr0 empty and v5432 as the new
  26. // array with deleted values
  27. print(v5432.valueOf()); // Works Fine
  28. assert.areEqual(v5432.toString(),"9.2,,,,,,,,1");
  29. var FloatArr0 = [];
  30. print(v5432.valueOf()); // BOOM, assert
  31. assert.areEqual(v5432.toString(),"9.2,,,,,,,,1");
  32. }
  33. },
  34. {
  35. name: "Empty Float Array Splice Test",
  36. body: function ()
  37. {
  38. var FloatArr1 = [9.2];
  39. var b = -9;
  40. FloatArr1[8] = 1;
  41. delete FloatArr1[0];
  42. var v5432 = FloatArr1.splice(b); // By definition of Splice, this should make FloatArr0 empty and v5432 as the new
  43. // array with deleted values
  44. print(v5432.valueOf()); // Works Fine
  45. assert.areEqual(v5432.toString(),",,,,,,,,1");
  46. var FloatArr1 = [];
  47. print(v5432.valueOf()); // BOOM, assert
  48. assert.areEqual(v5432.toString(),",,,,,,,,1");
  49. }
  50. },
  51. {
  52. name: "Int Splice Test",
  53. body: function ()
  54. {
  55. var IntArr0 = [9];
  56. var b = -9;
  57. IntArr0[8] = 1;
  58. var intDelArr = IntArr0.splice(b); // By definition of Splice, this should make IntArr0 empty and intDelArr as the new
  59. // array with deleted values
  60. print(intDelArr.valueOf()); // Works Fine
  61. assert.areEqual(intDelArr.toString(),"9,,,,,,,,1");
  62. var IntArr0 = [];
  63. print(intDelArr.valueOf()); // BOOM, assert
  64. assert.areEqual(intDelArr.toString(),"9,,,,,,,,1");
  65. }
  66. },
  67. {
  68. name: "Var Splice Test",
  69. body: function ()
  70. {
  71. var StringArr0 = ["hello"];
  72. var b = -9;
  73. StringArr0[8] = "hi";
  74. var strDelArr = StringArr0.splice(b); // By definition of Splice, this should make StringArr0 empty and strDelArr as the new
  75. // array with deleted values
  76. print(strDelArr.valueOf()); // Works Fine
  77. assert.areEqual(strDelArr.toString(),"hello,,,,,,,,hi");
  78. var StringArr0 = ["bar"];
  79. print(strDelArr.valueOf()); // BOOM, assert
  80. assert.areEqual(strDelArr.toString(),"hello,,,,,,,,hi");
  81. }
  82. }];
  83. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });