GenerateTests.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. function write(v) { WScript.Echo(v); }
  6. function foo() {}
  7. var all = [ "undefined", "null",
  8. "true", "false",
  9. "Boolean(true)", "Boolean(false)",
  10. "new Boolean(true)", "new Boolean(false)",
  11. "NaN", "+0", "-0", "0", "0.0", "-0.0", "+0.0",
  12. "1", "10", "10.0", "10.1", "-1",
  13. "-10", "-10.0", "-10.1",
  14. "Number.MAX_VALUE", "Number.MIN_VALUE", "Number.NaN", "Number.POSITIVE_INFINITY", "Number.NEGATIVE_INFINITY",
  15. "new Number(NaN)", "new Number(+0)", "new Number(-0)", "new Number(0)",
  16. "new Number(0.0)", "new Number(-0.0)", "new Number(+0.0)",
  17. "new Number(1)", "new Number(10)", "new Number(10.0)", "new Number(10.1)", "new Number(-1)",
  18. "new Number(-10)", "new Number(-10.0)", "new Number(-10.1)",
  19. "new Number(Number.MAX_VALUE)", "new Number(Number.MIN_VALUE)", "new Number(Number.NaN)",
  20. "new Number(Number.POSITIVE_INFINITY)", "new Number(Number.NEGATIVE_INFINITY)",
  21. "''", "0xa", "04", "'hello'", "'hel' + 'lo'",
  22. "String('')", "String('hello')", "String('h' + 'ello')",
  23. "new String('')", "new String('hello')", "new String('he' + 'llo')",
  24. "new Object()", "new Object()",
  25. "[1, 2, 3]", "[1 ,2 , 3]",
  26. "new Array(3)", "Array(3)", "new Array(1 ,2 ,3)", "Array(1)",
  27. "foo"
  28. ];
  29. var biops = [
  30. ["*", "mul" ], ["/", "div"], ["%", "mod"], // 11.5 Multiplicative operators
  31. ["+", "add" ], ["-", "sub"], // 11.6 Addtitive operators
  32. ["<<","lsh" ], [">>","rsh"], [">>>", "rshu"], // 11.7 Bitwise shift operators
  33. ["<", "lt" ], [">", "gt" ], ["<=", "le"], [">=", "ge" ], // 11.8 Relational operators
  34. ["==","eq" ], ["!=","ne" ], ["===", "seq"], ["!==","sne"], // 11.9 Equality operators
  35. ["&", "and" ], ["^", "xor"], ["|", "or"], // 11.10 Binary bitwise operators
  36. ["&&","land"], ["||","lor"] // 11.11 Binary logical operators
  37. ];
  38. var fileSystemObject = new ActiveXObject("Scripting.FileSystemObject");
  39. var WShell = new ActiveXObject("WScript.Shell");
  40. var MaxTestsPerFile = 1000;
  41. var fp;
  42. var fileArray = [];
  43. function AddCustomTests(arr)
  44. {
  45. arr.push("imul");
  46. arr.push("divbypow2");
  47. arr.push("B9AA6BBF.0");
  48. arr.push("6E55FA7A.0");
  49. arr.push("attackoftheclones");
  50. }
  51. function OpenFileAndWriteHeader(name) {
  52. if (fp)
  53. fp.close();
  54. fp = fileSystemObject.CreateTextFile(name + ".js", true);
  55. fp.WriteLine("//-------------------------------------------------------------------------------------------------------");
  56. fp.WriteLine("// Copyright (C) Microsoft. All rights reserved.");
  57. fp.WriteLine("// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.");
  58. fp.WriteLine("//-------------------------------------------------------------------------------------------------------");
  59. fp.WriteLine("");
  60. fp.WriteLine('function write(v) { WScript.Echo(v + ""); }');
  61. fp.WriteLine("");
  62. fp.WriteLine("function foo() {}");
  63. fp.WriteLine("");
  64. fileArray.push(name);
  65. }
  66. // Generate test files
  67. function GenerateTests() {
  68. for (var op = 0; op < biops.length; op++) {
  69. var fileNo = 0;
  70. OpenFileAndWriteHeader(biops[op][1]);
  71. var testCounter = 0;
  72. for (var i=0; i<all.length; ++i) {
  73. for (var j=0; j<all.length; ++j) {
  74. if(++testCounter > MaxTestsPerFile)
  75. {
  76. OpenFileAndWriteHeader("" + biops[op][1] + (fileNo++));
  77. testCounter = 0;
  78. }
  79. fp.WriteLine("write(" + all[i] + " " + biops[op][0] + " " + all[j] + ");");
  80. }
  81. }
  82. }
  83. if(fp)
  84. fp.close();
  85. }
  86. // Generate baseline files
  87. function Generate_CreateBaseLine() {
  88. fp = fileSystemObject.CreateTextFile("createBaseLine.bat", true);
  89. for (var file in fileArray) {
  90. fp.WriteLine("cscript.exe //nologo " + fileArray[file] + ".js > " + fileArray[file] + ".baseline");
  91. }
  92. fp.close();
  93. }
  94. // Generate rlexe.xml files
  95. function Generate_RLexe() {
  96. fp = fileSystemObject.CreateTextFile("rlexe.xml", true);
  97. fp.WriteLine('<?xml version="1.0"?>');
  98. fp.WriteLine('<regress-exe>');
  99. for (var file in fileArray) {
  100. fp.WriteLine(' <test>');
  101. fp.WriteLine(' <default>');
  102. fp.WriteLine(' <files>' + fileArray[file] + '.js</files>');
  103. fp.WriteLine(' <baseline>' + fileArray[file] + '.baseline</baseline>');
  104. fp.WriteLine(' </default>');
  105. fp.WriteLine(' </test>');
  106. }
  107. fp.WriteLine('</regress-exe>');
  108. fp.close();
  109. }
  110. GenerateTests();
  111. Generate_CreateBaseLine();
  112. AddCustomTests(fileArray);
  113. Generate_RLexe();