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
YAML
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'