======== #1 ========

script generation test
-(a + b)
-(a <=> b)
-4
(-4) + 3 * 4
((-4) + 3) * 4
-(4 * (3 + 4))
-a
`a
(m = func()) && m
func(a) = {}
func(a) { block? } = {}
func(a) {|a, b, c|}
func(a) {|(3 | 4 | 5), b, c|}
func(a) {|(3 | 4 | 5), b, c|}
func(a) {|(3 * 4 | 5), b, c|}
func(a) {|(3 | 4 | 5), b, (a | b | c)|}
func(a, b, c, d, e%, f*) = {}
`(3 + 4)
`(3 * 4)
`(-(3 * 4))
`(3 + 4 + 5 + 6)
`((-3) + 4 + 5 + 6)
`((-3) - (-4) + 5 + 6)
`(3 * 4 * 5 * 6)
`(3 * (-4) * 5 * 6)
`(a(3, 4, 5):hoge).func()
`(a:hoge).func()
`(a[0]:hoge).func()

======== #2 ========

+ [`complex, `number, `rational, `array@char, `array@uchar, `array@short, `array@ushort, `array@long, `array@ulong, `array@int, `array@uint, `array@float, `array@double, `matrix, `timedelta]
- [`complex, `number, `rational, `array@char, `array@uchar, `array@short, `array@ushort, `array@long, `array@ulong, `array@int, `array@uint, `array@float, `array@double, `matrix, `timedelta]
~ [`number, `function]
! [`any]
.. [`number]
+ [[`complex, `complex], [`number, `complex], [`complex, `number], [`number, `number], [`rational, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`pointer, `number], [`number, `rational], [`rational, `rational], [`string, `string], [`any, `string], [`binary, `string], [`string, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double], [`string, `binary], [`binary, `binary], [`timedelta, `datetime], [`matrix, `matrix], [`datetime, `timedelta], [`timedelta, `timedelta]]
- [[`complex, `complex], [`number, `complex], [`complex, `number], [`number, `number], [`rational, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`pointer, `number], [`number, `rational], [`rational, `rational], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double], [`color, `color], [`datetime, `datetime], [`matrix, `matrix], [`pointer, `pointer], [`datetime, `timedelta], [`timedelta, `timedelta]]
* [[`complex, `complex], [`number, `complex], [`complex, `number], [`number, `number], [`rational, `number], [`string, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`binary, `number], [`timedelta, `number], [`number, `rational], [`rational, `rational], [`number, `string], [`function, `any], [`matrix, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double], [`number, `binary], [`matrix, `list], [`any, `matrix], [`list, `matrix], [`matrix, `matrix], [`number, `timedelta]]
/ [[`complex, `complex], [`number, `complex], [`complex, `number], [`number, `number], [`rational, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`number, `rational], [`rational, `rational], [`matrix, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double]]
% [[`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double]]
** [[`complex, `complex], [`number, `complex], [`complex, `number], [`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`array@float, `number], [`array@double, `number], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint], [`number, `array@float], [`array@float, `array@float], [`number, `array@double], [`array@double, `array@double]]
== [[`any, `any]]
!= [[`any, `any]]
> [[`any, `any]]
< [[`any, `any]]
>= [[`any, `any]]
<= [[`any, `any]]
<=> [[`boolean, `boolean], [`complex, `complex], [`number, `number], [`rational, `number], [`number, `rational], [`rational, `rational], [`string, `string], [`symbol, `symbol], [`binary, `binary], [`datetime, `datetime], [`list, `list], [`timedelta, `timedelta]]
in [[`any, `any]]
| [[`any, `nil], [`boolean, `boolean], [`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`nil, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint]]
& [[`any, `nil], [`boolean, `boolean], [`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`nil, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint]]
^ [[`boolean, `boolean], [`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint]]
<< [[`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`stream, `any], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint]]
>> [[`number, `number], [`array@char, `number], [`array@uchar, `number], [`array@short, `number], [`array@ushort, `number], [`array@long, `number], [`array@ulong, `number], [`array@int, `number], [`array@uint, `number], [`number, `array@char], [`array@char, `array@char], [`number, `array@uchar], [`array@uchar, `array@uchar], [`number, `array@short], [`array@short, `array@short], [`number, `array@ushort], [`array@ushort, `array@ushort], [`number, `array@long], [`array@long, `array@long], [`number, `array@ulong], [`array@ulong, `array@ulong], [`number, `array@int], [`array@int, `array@int], [`number, `array@uint], [`array@uint, `array@uint]]
|| [[`any, `any]]
&& [[`any, `any]]
.. [[`number, `number]]

======== #3 ========

+A
-A
~A
!A
A + A
A - A
A * A
A / A
A % A
A ** A
A == A
A != A
A > A
A < A
A >= A
A <= A
A <=> A
A in A
A | A
A & A
A ^ A
A << A
A >> A
A .. A
__getitem__ 3
__getitemx__
__setitem__ 3 2
__setitemx__ 2
__getprop__ b
__setprop__ b 2

======== #4 ========

hello world
hello world
2nd line
3rd line
hello world

======== #5 ========

nil | 3 .. 3
3 | nil .. 3
nil | nil .. nil
nil & 3 .. nil
3 & nil .. nil
nil & nil .. nil

======== #6 ========

2 in 2 .. true
2 in 3 .. false
2 in 0 .. 10 .. true
2 in 4 .. 10 .. false
2 in [0 .. 10] .. true
2 in [4 .. 10] .. false
[0 .. 10 in 4] .. [false, false, false, false, true, false, false, false, false, false, false]
[0 .. 10 in (-2)] .. [false, false, false, false, false, false, false, false, false, false, false]
[0 .. 10 in 0 .. 5] .. [true, true, true, true, true, true, false, false, false, false, false]
[0 .. 10 in 4 .. 8] .. [false, false, false, false, true, true, true, true, true, false, false]
[0 .. 10 in [0 .. 5]] .. [true, true, true, true, true, true, false, false, false, false, false]
[0 .. 10 in [4 .. 8]] .. [false, false, false, false, true, true, true, true, true, false, false]
[0 .. 10] in 4 .. [false, false, false, false, true, false, false, false, false, false, false]
[0 .. 10] in (-2) .. [false, false, false, false, false, false, false, false, false, false, false]
[0 .. 10] in 0 .. 5 .. [true, true, true, true, true, true, false, false, false, false, false]
[0 .. 10] in 4 .. 8 .. [false, false, false, false, true, true, true, true, true, false, false]
[0 .. 10] in [0 .. 5] .. [true, true, true, true, true, true, false, false, false, false, false]
[0 .. 10] in [4 .. 8] .. [false, false, false, false, true, true, true, true, true, false, false]

======== #7 ========

a=1, b=2, c=3
a=1, b=2, c=[3, 4, 5]
a=1, b=2, c=[3, 4, 5]
a=1, b=2, c=[]

======== #8 ========

name = apple, cnt = 0
Fruit + number
Fruit - number
Fruit * number
Fruit / number
Fruit % number
Fruit ** number
number + Fruit
number - Fruit
number * Fruit
number / Fruit
number % Fruit
number ** Fruit
Fruit == number
Fruit != number
Fruit < number
Fruit > number
Fruit <= number
Fruit >= number
Fruit <=> number
Fruit | number
Fruit & number
Fruit .. number

======== #9 ========

false & false .. false
false & true .. false
true & false .. false
true & true .. true
false | false .. false
false | true .. true
true | false .. true
true | true .. true
false ^ false .. false
false ^ true .. true
true ^ false .. true
true ^ true .. false
false & false & false .. false
false & false & true .. false
false & true & false .. false
false & true & true .. false
true & false & false .. false
true & false & true .. false
true & true & false .. false
true & true & true .. true
false | false | false .. false
false | false | true .. true
false | true | false .. true
false | true | true .. true
true | false | false .. true
true | false | true .. true
true | true | false .. true
true | true | true .. true
false | true & false .. false
x .. [true, false, false, true, false, true, false, false, true, true]
y .. [true, false, false, true, false, false, false, false, true, true]
z .. [false, false, false, true, false, false, false, true, true, false]
x | y .. [true, false, false, true, false, true, false, false, true, true]
x & y .. [true, false, false, true, false, false, false, false, true, true]
x || y .. [true, false, false, true, false, true, false, false, true, true]
x && y .. [true, false, false, true, false, false, false, false, true, true]
x ^ y .. [false, false, false, false, false, true, false, false, false, false]
x | y | z .. [true, false, false, true, false, true, false, true, true, true]
x & y & z .. [false, false, false, true, false, false, false, false, true, false]
x || y || z .. [true, false, false, true, false, true, false, true, true, true]
x && y && z .. [false, false, false, true, false, false, false, false, true, false]
x ^ y ^ z .. [false, false, false, true, false, true, false, true, true, false]

======== #10 ========

f(a:number, b:number, c:number, d:number):map = format('%d-%d-%d-%d', a, b, c, d)
f % [1, 2, 3, 4] .. 1-2-3-4
f % [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] .. ['1-4-7-10', '2-5-8-11', '3-6-9-12']
f * [1, 2, 3, 4] .. 1-2-3-4
f * [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]] .. ['1-2-3-4', '5-6-7-8', '9-10-11-12', '13-14-15-16', '17-18-19-20']

======== #11 ========

f(a:number, b:number, c:number, d:number):map = a + b + c + d
f % [1, 2, 3, 4] .. 10
f % [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]] .. [22, 26, 30]
f * [1, 2, 3, 4] .. 10
f * [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]] .. [10, 26, 42, 58, 74]
