From dfa8ec2fa482e60e83c7fd4cda543066f2c410d8 Mon Sep 17 00:00:00 2001 From: alexlamsl Date: Mon, 3 Apr 2017 01:56:39 +0800 Subject: [PATCH] extend `test/ufuzz.js` - property access - array literal - object literal --- test/ufuzz.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/test/ufuzz.js b/test/ufuzz.js index 7aab6715..1a84eae3 100644 --- a/test/ufuzz.js +++ b/test/ufuzz.js @@ -474,7 +474,7 @@ function createExpression(recurmax, noComma, stmtDepth, canThrow) { return _createExpression(recurmax, noComma, stmtDepth, canThrow); } function _createExpression(recurmax, noComma, stmtDepth, canThrow) { - switch (rng(15)) { + switch (rng(20)) { case 0: return createUnaryOp() + (rng(2) === 1 ? 'a' : 'b'); case 1: @@ -552,9 +552,67 @@ function _createExpression(recurmax, noComma, stmtDepth, canThrow) { return " ((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || a || 3).toString() "; case 14: return " /[abc4]/.test(((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + ") || b || 5).toString()) "; + case 15: + return " ((" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + + ") || " + rng(10) + ").toString()[" + + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "] "; + case 16: + return createArrayLiteral(recurmax, COMMA_OK, stmtDepth, canThrow); + case 17: + return createObjectLiteral(recurmax, COMMA_OK, stmtDepth, canThrow); + case 18: + return '(' + createArrayLiteral(recurmax, COMMA_OK, stmtDepth, canThrow) + '[' + + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "]) "; + case 19: + return '(' + createObjectLiteral(recurmax, COMMA_OK, stmtDepth, canThrow) + '[' + + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "]) "; } } +function createArrayLiteral(recurmax, noComma, stmtDepth, canThrow) { + var arr = "["; + for (var i = 0, N = rng(4); i <= N; ++i) { + // in rare cases produce an array hole element + var element = rng(20) ? createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) : ""; + arr += element + ", "; + } + return arr + "]"; +} + +var KEYS = [ + "length", + "foo", + "bar", + "a", + "b", + "c", + "x", + "''", + "' '", + "'-2'", + "'-1'", + "0", + "1", + "2.5", + "3", + "4", + "undefined", + "null", + "NaN", + "Infinity", + "in", + "var", +]; + +function createObjectLiteral(recurmax, noComma, stmtDepth, canThrow) { + var obj = "({"; + for (var i = 0, N = rng(3); i <= N; ++i) { + var key = KEYS[rng(KEYS.length)]; + obj += key + ":(" + createExpression(recurmax, COMMA_OK, stmtDepth, canThrow) + "), "; + } + return obj + "})"; +} + function createNestedBinaryExpr(recurmax, noComma) { recurmax = 3; // note that this generates 2^recurmax expression parts... make sure to cap it return _createSimpleBinaryExpr(recurmax, noComma);