UNPKG

tcl-js

Version:

tcl-js is a tcl intepreter written completely in Typescript. It is meant to replicate the tcl-sh interpreter as closely as possible.

348 lines (347 loc) 6.38 kB
Basic Operations: - name: Unary Minus and Plus input: type: raw value: 'expr -3 + +5' output: type: raw value: '2' - name: Addition and Subtraction input: type: raw value: 'expr 3 + 5 - 2' output: type: raw value: '6' - name: Multiplication and Division input: type: raw value: 'expr 3 * 9 / 3' output: type: raw value: '9' - name: Divide by Zero input: type: raw value: 'expr 3 / 0' output: type: error - name: Exponentiation input: type: raw value: 'expr 2 ** 4' output: type: raw value: '16' Relational Operations: Equals: - name: Fail input: type: raw value: 'expr 2 == 4' output: type: raw value: '0' - name: Success input: type: raw value: 'expr 4 == 4' output: type: raw value: '1' - name: Fail string input: type: raw value: 'expr 2 eq 4' output: type: raw value: '0' - name: Success string input: type: raw value: 'expr 4 eq 4' output: type: raw value: '1' Not Equals: - name: Fail input: type: raw value: 'expr 2 != 4' output: type: raw value: '1' - name: Success input: type: raw value: 'expr 4 != 4' output: type: raw value: '0' - name: Fail string input: type: raw value: 'expr 2 ne 4' output: type: raw value: '1' - name: Success string input: type: raw value: 'expr 4 ne 4' output: type: raw value: '0' Greater and Smaller than: - name: Greater input: type: raw value: 'expr 2 > 4' output: type: raw value: '0' - name: Smaller input: type: raw value: 'expr 2 < 4' output: type: raw value: '1' Greater and Smaller than or Equals: - name: Greater input: type: raw value: 'expr 2 >= 4' output: type: raw value: '0' - name: Smaller input: type: raw value: 'expr 2 <= 4' output: type: raw value: '1' - name: Greater Equals input: type: raw value: 'expr 4 >= 4' output: type: raw value: '1' - name: Smaller Equals input: type: raw value: 'expr 4 <= 4' output: type: raw value: '1' Integer Operations: - name: Bitwise NOT input: type: raw value: 'expr ~4' output: type: raw value: '-5' - name: Logical NOT input: type: raw value: 'expr !1' output: type: raw value: '0' - name: Remainder input: type: raw value: 'expr 5 % 3' output: type: raw value: '2' - name: Left bit shift input: type: raw value: 'expr 2 << 2' output: type: raw value: '8' - name: Right bit shift input: type: raw value: 'expr 8 >> 2' output: type: raw value: '2' - name: Bitwise AND input: type: raw value: 'expr 28 & 7' output: type: raw value: '4' - name: Bitwise exlusive OR input: type: raw value: 'expr 28 ^ 7' output: type: raw value: '27' - name: Bitwise OR input: type: raw value: 'expr 28 | 7' output: type: raw value: '31' Logical Operations: - name: AND true input: type: raw value: 'expr true && true' output: type: raw value: '1' - name: AND false input: type: raw value: 'expr true && false' output: type: raw value: '0' - name: OR true input: type: raw value: 'expr true || false' output: type: raw value: '1' - name: OR false input: type: raw value: 'expr false || false' output: type: raw value: '0' - name: If statement input: type: raw value: 'expr {3 == 3 ? 2 : 1}' output: type: raw value: '2' Strings: - name: Equal input: type: raw value: 'expr {"test" == "test"}' output: type: raw value: '1' - name: Not Equal input: type: raw value: 'expr {"jup" != "test"}' output: type: raw value: '1' - name: Greater than input: type: raw value: 'expr {"z" > "a"}' output: type: raw value: '1' - name: Smaller than input: type: raw value: 'expr {"Z" < "a"}' output: type: raw value: '1' Braces: - name: Simple input: type: raw value: 'expr {4 * (4 / 2)}' output: type: raw value: '8' - name: Nested input: type: raw value: 'expr {4 * ((sqrt(16) + 2) / 2)}' output: type: raw value: '12' - name: Nested with if input: type: raw value: 'expr {(4 * ((sqrt(16) + 2) / 2)) == 12 ? 8 : 2}' output: type: raw value: '8' Advanced: - name: fmod input: type: raw value: 'expr {fmod(10, 3)}' output: type: raw value: '1' - name: bool true input: type: raw value: 'expr {bool(10)}' output: type: raw value: '1' - name: bool false input: type: raw value: 'expr {bool(0)}' output: type: raw value: '0' - name: double input: type: raw value: 'expr {double(10)}' output: type: raw value: '10' - name: entier input: type: raw value: 'expr {entier(10)}' output: type: raw value: '10' - name: wide input: type: raw value: 'expr {wide(10)}' output: type: raw value: '10' - name: int input: type: raw value: 'expr {int(10 / 3)}' output: type: raw value: '3' - name: isqrt input: type: raw value: 'expr {isqrt(13)}' output: type: raw value: '3' - name: isqrt input: type: raw value: 'expr {srand(3) * 0 + 1}' # Yes i do realize what i have put here output: type: raw value: '1'