-
-
Notifications
You must be signed in to change notification settings - Fork 594
Expand file tree
/
Copy pathDecodeUriBenchmark.cs
More file actions
77 lines (70 loc) · 2.79 KB
/
DecodeUriBenchmark.cs
File metadata and controls
77 lines (70 loc) · 2.79 KB
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
using BenchmarkDotNet.Attributes;
namespace Jint.Benchmark;
[MemoryDiagnoser]
public class DecodeUriBenchmark
{
private const string HarnessScript = @"
function decimalToPercentHexString(n) {
var hex = '0123456789ABCDEF';
return '%' + hex[(n >> 4) & 0xf] + hex[n & 0xf];
}";
private Prepared<Script> _decodeUriBulk;
private Prepared<Script> _decodeUriComponentBulk;
[GlobalSetup]
public void Setup()
{
// Matches the real test262 S15.1.3.1_A2.5_T1.js pattern with function calls
_decodeUriBulk = Engine.PrepareScript(HarnessScript + @"
for (var indexB1 = 0xF0; indexB1 <= 0xF4; indexB1++) {
var hexB1 = decimalToPercentHexString(indexB1);
for (var indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) {
if ((indexB1 === 0xF0) && (indexB2 <= 0x9F)) continue;
if ((indexB1 === 0xF4) && (indexB2 >= 0x90)) continue;
var hexB1_B2 = hexB1 + decimalToPercentHexString(indexB2);
for (var indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) {
var hexB1_B2_B3 = hexB1_B2 + decimalToPercentHexString(indexB3);
for (var indexB4 = 0x80; indexB4 <= 0xBF; indexB4++) {
var hexB1_B2_B3_B4 = hexB1_B2_B3 + decimalToPercentHexString(indexB4);
var index = (indexB1 & 0x07) * 0x40000 + (indexB2 & 0x3F) * 0x1000 + (indexB3 & 0x3F) * 0x40 + (indexB4 & 0x3F);
var L = ((index - 0x10000) & 0x03FF) + 0xDC00;
var H = (((index - 0x10000) >> 10) & 0x03FF) + 0xD800;
decodeURI(hexB1_B2_B3_B4);
String.fromCharCode(H, L);
}
}
}
}");
_decodeUriComponentBulk = Engine.PrepareScript(HarnessScript + @"
for (var indexB1 = 0xF0; indexB1 <= 0xF4; indexB1++) {
var hexB1 = decimalToPercentHexString(indexB1);
for (var indexB2 = 0x80; indexB2 <= 0xBF; indexB2++) {
if ((indexB1 === 0xF0) && (indexB2 <= 0x9F)) continue;
if ((indexB1 === 0xF4) && (indexB2 >= 0x90)) continue;
var hexB1_B2 = hexB1 + decimalToPercentHexString(indexB2);
for (var indexB3 = 0x80; indexB3 <= 0xBF; indexB3++) {
var hexB1_B2_B3 = hexB1_B2 + decimalToPercentHexString(indexB3);
for (var indexB4 = 0x80; indexB4 <= 0xBF; indexB4++) {
var hexB1_B2_B3_B4 = hexB1_B2_B3 + decimalToPercentHexString(indexB4);
var index = (indexB1 & 0x07) * 0x40000 + (indexB2 & 0x3F) * 0x1000 + (indexB3 & 0x3F) * 0x40 + (indexB4 & 0x3F);
var L = ((index - 0x10000) & 0x03FF) + 0xDC00;
var H = (((index - 0x10000) >> 10) & 0x03FF) + 0xD800;
decodeURIComponent(hexB1_B2_B3_B4);
String.fromCharCode(H, L);
}
}
}
}");
}
[Benchmark]
public void DecodeUri_Bulk()
{
var engine = new Engine();
engine.Execute(_decodeUriBulk);
}
[Benchmark]
public void DecodeUriComponent_Bulk()
{
var engine = new Engine();
engine.Execute(_decodeUriComponentBulk);
}
}