diff options
| author | Uri Shaked | 2019-12-01 23:18:22 +0200 |
|---|---|---|
| committer | Uri Shaked | 2019-12-01 23:18:34 +0200 |
| commit | 27ea13401dfa443243d588c5636c85e1037b986d (patch) | |
| tree | 77c4c63c8962bc9b066aa2307a156d25f1128f41 /benchmark/permutations.ts | |
| parent | feat: add benchmarking code (diff) | |
| download | avr8js-27ea13401dfa443243d588c5636c85e1037b986d.tar.gz avr8js-27ea13401dfa443243d588c5636c85e1037b986d.tar.bz2 avr8js-27ea13401dfa443243d588c5636c85e1037b986d.zip | |
feat: improve benchmark code
compare 3 alternatives:
1. Current avrInstruction() implementation
2. Map opcodes using a Javascript map
3. Map opcodes using a Uint16Array and big switch statement
Diffstat (limited to '')
| -rw-r--r-- | benchmark/permutations.ts | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/benchmark/permutations.ts b/benchmark/permutations.ts new file mode 100644 index 0000000..4465557 --- /dev/null +++ b/benchmark/permutations.ts @@ -0,0 +1,23 @@ +export function* permutations(pattern: string) { + let totalPerms = 1; + for (const char of pattern) { + if (char !== '0' && char !== '1') { + totalPerms *= 2; + } + } + + for (let permIndex = 0; permIndex < totalPerms; permIndex++) { + let varIndex = 0; + let value = 0; + for (const char of pattern) { + value *= 2; + if (char === '1') { + value++; + } else if (char !== '0') { + value += permIndex & (1 << varIndex) ? 1 : 0; + varIndex++; + } + } + yield value; + } +} |
