Skip to content

Commit

Permalink
Upgrade benchmark project and add YantraJS (#1276)
Browse files Browse the repository at this point in the history
  • Loading branch information
lahma committed Aug 31, 2022
1 parent 389629c commit 3eddf04
Show file tree
Hide file tree
Showing 22 changed files with 735 additions and 763 deletions.
137 changes: 68 additions & 69 deletions Jint.Benchmark/ArrayBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,126 +1,125 @@
using BenchmarkDotNet.Attributes;

namespace Jint.Benchmark
namespace Jint.Benchmark;

[MemoryDiagnoser]
public class ArrayBenchmark
{
[MemoryDiagnoser]
public class ArrayBenchmark
{
private const string script = @"
private const string script = @"
var testArray = [29, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63, 27, 28, 838, 22, 2882, 2, 93, 84, 74, 7, 933, 3754, 3874, 22838, 38464, 3837, 82424, 2927, 2625, 63];
var stringArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146', '147', '148', '149', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '160', '161', '162', '163', '164', '165', '166', '167', '168', '169', '170', '171', '172', '173', '174', '175', '176', '177', '178', '179', '180', '181', '182', '183', '184', '185', '186', '187', '188', '189', '190', '191', '192', '193', '194', '195', '196', '197', '198', '199', '200', '201', '202', '203', '204', '205', '206', '207', '208', '209', '210', '211', '212', '213', '214', '215', '216', '217', '218', '219', '220', '221', '222', '223', '224', '225', '226', '227', '228', '229', '230', '231', '232', '233', '234', '235', '236', '237', '238', '239', '240', '241', '242', '243', '244', '245', '246', '247', '248', '249', '250', '251', '252', '253', '254', '255', '256', '257', '258', '259', '260', '261', '262', '263', '264', '265', '266', '267', '268', '269', '270', '271', '272', '273', '274', '275', '276', '277', '278', '279', '280', '281', '282', '283', '284', '285', '286', '287', '288', '289', '290', '291', '292', '293', '294', '295', '296', '297', '298', '299', '300', '301', '302', '303', '304', '305', '306', '307', '308', '309', '310', '311', '312', '313', '314', '315', '316', '317', '318', '319', '320', '321', '322', '323', '324', '325', '326', '327', '328', '329', '330', '331', '332', '333', '334', '335', '336', '337', '338', '339', '340', '341', '342', '343', '344', '345', '346', '347', '348', '349', '350', '351', '352', '353', '354', '355', '356', '357', '358', '359', '360', '361', '362', '363', '364', '365', '366', '367', '368', '369', '370', '371', '372', '373', '374', '375', '376', '377', '378', '379', '380', '381', '382', '383', '384', '385', '386', '387', '388', '389', '390', '391', '392', '393', '394', '395', '396', '397', '398', '399', '400', '401', '402', '403', '404', '405', '406', '407', '408', '409', '410', '411', '412', '413', '414', '415', '416', '417', '418', '419', '420', '421', '422', '423', '424', '425', '426', '427', '428', '429', '430', '431', '432', '433', '434', '435', '436', '437', '438', '439', '440', '441', '442', '443', '444', '445', '446', '447', '448', '449', '450', '451', '452', '453', '454', '455', '456', '457', '458', '459', '460', '461', '462', '463', '464', '465', '466', '467', '468', '469', '470', '471', '472', '473', '474', '475', '476', '477', '478', '479', '480', '481', '482', '483', '484', '485', '486', '487', '488', '489', '490', '491', '492', '493', '494', '495', '496', '497', '498', '499', '500', '501', '502', '503', '504', '505', '506', '507', '508', '509', '510', '511', '512', '513', '514', '515', '516', '517', '518', '519', '520', '521', '522', '523', '524', '525', '526', '527', '528', '529', '530', '531', '532', '533', '534', '535', '536', '537', '538', '539', '540', '541', '542', '543', '544', '545', '546', '547', '548', '549', '550', '551', '552', '553', '554', '555', '556', '557', '558', '559', '560', '561', '562', '563', '564', '565', '566', '567', '568', '569', '570', '571', '572', '573', '574', '575', '576', '577', '578', '579', '580', '581', '582', '583', '584', '585', '586', '587', '588', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '600', '601', '602', '603', '604', '605', '606', '607', '608', '609', '610', '611', '612', '613', '614', '615', '616', '617', '618', '619', '620', '621', '622', '623', '624', '625', '626', '627', '628', '629', '630', '631', '632', '633', '634', '635', '636', '637', '638', '639', '640', '641', '642', '643', '644', '645', '646', '647', '648', '649', '650', '651', '652', '653', '654', '655', '656', '657', '658', '659', '660', '661', '662', '663', '664', '665', '666', '667', '668', '669', '670', '671', '672', '673', '674', '675', '676', '677', '678', '679', '680', '681', '682', '683', '684', '685', '686', '687', '688', '689', '690', '691', '692', '693', '694', '695', '696', '697', '698', '699', '700', '701', '702', '703', '704', '705', '706', '707', '708', '709', '710', '711', '712', '713', '714', '715', '716', '717', '718', '719', '720', '721', '722', '723', '724', '725', '726', '727', '728', '729', '730', '731', '732', '733', '734', '735', '736', '737', '738', '739', '740', '741', '742', '743', '744', '745', '746', '747', '748', '749', '750', '751', '752', '753', '754', '755', '756', '757', '758', '759', '760', '761', '762', '763', '764', '765', '766', '767', '768', '769', '770', '771', '772', '773', '774', '775', '776', '777', '778', '779', '780', '781', '782', '783', '784', '785', '786', '787', '788', '789', '790', '791', '792', '793', '794', '795', '796', '797', '798', '799', '800', '801', '802', '803', '804', '805', '806', '807', '808', '809', '810', '811', '812', '813', '814', '815', '816', '817', '818', '819', '820', '821', '822', '823', '824', '825', '826', '827', '828', '829', '830', '831', '832', '833', '834', '835', '836', '837', '838', '839', '840', '841', '842', '843', '844', '845', '846', '847', '848', '849', '850', '851', '852', '853', '854', '855', '856', '857', '858', '859', '860', '861', '862', '863', '864', '865', '866', '867', '868', '869', '870', '871', '872', '873', '874', '875', '876', '877', '878', '879', '880', '881', '882', '883', '884', '885', '886', '887', '888', '889', '890', '891', '892', '893', '894', '895', '896', '897', '898', '899', '900', '901', '902', '903', '904', '905', '906', '907', '908', '909', '910', '911', '912', '913', '914', '915', '916', '917', '918', '919', '920', '921', '922', '923', '924', '925', '926', '927', '928', '929', '930', '931', '932', '933', '934', '935', '936', '937', '938', '939', '940', '941', '942', '943', '944', '945', '946', '947', '948', '949', '950', '951', '952', '953', '954', '955', '956', '957', '958', '959', '960', '961', '962', '963', '964', '965', '966', '967', '968', '969', '970', '971', '972', '973', '974', '975', '976', '977', '978', '979', '980', '981', '982', '983', '984', '985', '986', '987', '988', '989', '990', '991', '992', '993', '994', '995', '996', '997', '998', '999', '1000'];
";

private Engine engine;
private Engine engine;


[GlobalSetup]
public void Setup()
{
engine = new Engine();
engine.Execute(script);
}
[GlobalSetup]
public void Setup()
{
engine = new Engine();
engine.Execute(script);
}

[Params(100)]
public int N { get; set; }
[Params(100)]
public int N { get; set; }

[Benchmark]
public void Slice()
[Benchmark]
public void Slice()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute("testArray.slice();");
}
engine.Execute("testArray.slice();");
}
}

[Benchmark]
public void Concat()
[Benchmark]
public void Concat()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute("[].concat(testArray);");
}
engine.Execute("[].concat(testArray);");
}
}

[Benchmark]
public void Unshift()
[Benchmark]
public void Unshift()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute(@"
engine.Execute(@"
var obj2 = [];
for (var i = testArray.length; i--;) {
obj2.unshift(testArray[i]);
}
");
}
}
}

[Benchmark]
public void Push()
[Benchmark]
public void Push()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute(@"
engine.Execute(@"
var obj2 = [];
for (var i = 0, l = testArray.length; i < l; i++) {
obj2.push(testArray[i]);
}
");
}
}
}

[Benchmark]
public void Index()
[Benchmark]
public void Index()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute(@"
engine.Execute(@"
var obj2 = new Array(testArray.length);
for (var i = 0, l = testArray.length; i < l; i++) {
obj2[i] = testArray[i];
}
");
}
}
}

[Benchmark]
public void Map()
[Benchmark]
public void Map()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute(@"
engine.Execute(@"
var obj2 = testArray.map(function(i) {
return i;
});
");
}
}
}

[Benchmark]
public void Apply()
[Benchmark]
public void Apply()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute("Array.apply(undefined, testArray);");
}
engine.Execute("Array.apply(undefined, testArray);");
}
}

[Benchmark]
public void JsonStringifyParse()
[Benchmark]
public void JsonStringifyParse()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute("JSON.parse(JSON.stringify(testArray));");
}
engine.Execute("JSON.parse(JSON.stringify(testArray));");
}
}

[Benchmark]
public void FilterWithString()
[Benchmark]
public void FilterWithString()
{
for (int i = 0; i < N; ++i)
{
for (int i = 0; i < N; ++i)
{
engine.Execute("stringArray.filter(function(i) { return i === '55'; });");
}
engine.Execute("stringArray.filter(function(i) { return i === '55'; });");
}
}
}
}
14 changes: 6 additions & 8 deletions Jint.Benchmark/ArrayStressBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
using BenchmarkDotNet.Attributes;

namespace Jint.Benchmark
namespace Jint.Benchmark;

[MemoryDiagnoser]
public class ArrayStressBenchmark : SingleScriptBenchmark
{
[MemoryDiagnoser]
public class ArrayStressBenchmark : SingleScriptBenchmark
{
protected override string Script => "var ret=[],tmp,num=100,i=256;for(var j1=0;j1<i*15;j1++){ret=[];ret.length=i}for(var j2=0;j2<i*10;j2++){ret=new Array(i)}ret=[];for(var j3=0;j3<i;j3++){ret.unshift(j3)}ret=[];for(var j4=0;j4<i;j4++){ret.splice(0,0,j4)}var a=ret.slice();for(var j5=0;j5<i;j5++){tmp=a.shift()}var b=ret.slice();for(var j6=0;j6<i;j6++){tmp=b.splice(0,1)}ret=[];for(var j7=0;j7<i*25;j7++){ret.push(j7)}var c=ret.slice();for(var j8=0;j8<i*25;j8++){tmp=c.pop()}var done = true;";
protected override string Script => "var ret=[],tmp,num=100,i=256;for(var j1=0;j1<i*15;j1++){ret=[];ret.length=i}for(var j2=0;j2<i*10;j2++){ret=new Array(i)}ret=[];for(var j3=0;j3<i;j3++){ret.unshift(j3)}ret=[];for(var j4=0;j4<i;j4++){ret.splice(0,0,j4)}var a=ret.slice();for(var j5=0;j5<i;j5++){tmp=a.shift()}var b=ret.slice();for(var j6=0;j6<i;j6++){tmp=b.splice(0,1)}ret=[];for(var j7=0;j7<i*25;j7++){ret.push(j7)}var c=ret.slice();for(var j8=0;j8<i*25;j8++){tmp=c.pop()}var done = true;";

[Params(20)]
public override int N { get; set; }
}
public override int N => 10;
}
107 changes: 53 additions & 54 deletions Jint.Benchmark/DictionaryBenchmark.cs
Original file line number Diff line number Diff line change
@@ -1,73 +1,72 @@
using Jint.Collections;
using BenchmarkDotNet.Attributes;

namespace Jint.Benchmark
namespace Jint.Benchmark;

[MemoryDiagnoser]
public class DictionaryBenchmark
{
[MemoryDiagnoser]
public class DictionaryBenchmark
private static readonly string[] _keys =
{
private static readonly string[] _keys =
{
"some",
"key and",
"another",
"varying",
"---the --",
"keys and more",
"aa bbb",
"asasd asd ",
"asdsad asd as s",
"asdadsasa",
"23323232323",
"asdadsada sa213"
};
"some",
"key and",
"another",
"varying",
"---the --",
"keys and more",
"aa bbb",
"asasd asd ",
"asdsad asd as s",
"asdadsasa",
"23323232323",
"asdadsada sa213"
};

[Params(0, 2, 3, 5, 8, 9, 10)]
public int N { get; set; }
[Params(0, 2, 3, 5, 8, 9, 10)]
public int N { get; set; }

[Benchmark]
public void HybridDictionary()
[Benchmark]
public void HybridDictionary()
{
var hybridDictionary = new HybridDictionary<object>();
for (var i = 0; i < N; i++)
{
var hybridDictionary = new HybridDictionary<object>();
for (var i = 0; i < N; i++)
{
hybridDictionary.Add(_keys[i], _keys);
}
hybridDictionary.Add(_keys[i], _keys);
}

foreach (var key in _keys)
{
hybridDictionary.ContainsKey(key);
}
foreach (var key in _keys)
{
hybridDictionary.ContainsKey(key);
}
}

[Benchmark]
public void Dictionary()
[Benchmark]
public void Dictionary()
{
var dictionary = new Dictionary<string, object>();
for (var i = 0; i < N; i++)
{
var dictionary = new Dictionary<string, object>();
for (var i = 0; i < N; i++)
{
dictionary.Add(_keys[i], _keys);
}
dictionary.Add(_keys[i], _keys);
}

foreach (var key in _keys)
{
dictionary.ContainsKey(key);
}
foreach (var key in _keys)
{
dictionary.ContainsKey(key);
}
}

[Benchmark]
public void StringDictionarySlim()
[Benchmark]
public void StringDictionarySlim()
{
var dictionary = new StringDictionarySlim<object>();
for (var i = 0; i < N; i++)
{
var dictionary = new StringDictionarySlim<object>();
for (var i = 0; i < N; i++)
{
dictionary[_keys[i]] =_keys;
}
dictionary[_keys[i]] =_keys;
}

foreach (var key in _keys)
{
dictionary.ContainsKey(key);
}
foreach (var key in _keys)
{
dictionary.ContainsKey(key);
}
}
}
}

0 comments on commit 3eddf04

Please sign in to comment.