-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathu-lambda
executable file
·122 lines (97 loc) · 3.44 KB
/
u-lambda
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# vim:ft=sh nonu
set -o errexit
set -v
scc -a10 'int i=10; (+ _1)(i)'
scc -a10 '(+ + _1)(10)'
scc -a10 '(- _1)(2) * (+ - - - + _1)(5)'
scc -a10 '(_1 +_2)(2,8)'
scc -a10 '(_1 +_2)(MT(2,4,6))'
scc -a10 'range(5) || (_1 +_2)'
scc -a10 '(_1 +_1)(5)'
# var
scc -a10 'var(10)(1, 2)'
scc -a10 'auto v=var(i); i=10; v(42)'
# MIXED TYPES
scc -a10 '(_1+2)(8)'
scc -a10 '(8+_1)(2)'
scc -a10 '(8+-_1+4)(2)'
scc -a10 '(_1 -_2)(11,1)'
scc -a1 '(2*_1 + 20/_1 - 30%_1)(10) == (2*10 + 20/10 - 30%10)'
# REF-CORRECTNESS
scc -a1 'to t(1); var(t)(99); t.instances'
scc -a1 'var(to(1))(99).constructed'
scc -a1 'constant(to(1))(99).instances'
scc -a1 'to t(1); _1(t).instances'
scc -a1 '_1(to(1)).instances'
scc -a10 'vint v{10,11}; *((+_1)(v))'
#scc -a10 'vint v{10,11}; ((_1++)(v))=10'
scc -a10 'int i=0; (_1+=10)(i); i'
scc -a10 ' *((+_1)(vint{10,11}))'
# PREFIX-1
scc -a10 'vint v{1,2}; ((++_1)(v))=10'
scc -a10 'dint v{1,10}; (++(--_1)(v))'
scc -a1 '(!_1)(false) && (!_1)(0)'
scc -a10 'int i=10; *(&_1)(i)'
# POSTFIX-1
scc -a10 'vint v{10,20}; ((_1--)(v)++)'
# BINARY
scc -a10 'int i=0; (_1+=2)(i); (_1-=1)(i); (_1*=60)(i); (_1/=2)(i); (_1%=20)(i); i'
scc -a1 '(_1<<2 >> 1 ^ 3)(1)'
scc -a1 '(false || _1 || true )(false)'
scc -a1 '(0 <= _1 && _1 < 2 && 1 == _1 && _1 != 2) (1)'
# MEMBER
# array subscript
scc -a1 'range(9)[1]'
#scc -a1 '( ++ - _1)(1)' # error: lvalue required TOADD STATIC ASSERT
scc -a1 '(_1[1])(v9) * (_1[1])(vint{0,1,2})'
scc -a1 '_1[1](range(9))'
# scc -a1 '(v9[_1])(1)' # not fixable: error: no viable overloaded operator[] for type 'std::vector<int>'
scc -a1 '(range(v9)[_1])(1)'
# scc 'range(9) * v9[_1]' # not fixable
scc -a10 '(range(5) * range(v9)[_1]) || plus_'
# scc -a10 '(range(5) * range(9)[_1]) || plus_' # FIXME: numeric_range with lambda subscript
scc -a1 '(_1[_2])(v9,1)'
# filtered_range
scc 'v9 | (_1 == 5)'
scc 'v9 | (_1 - 5)'
scc 'v9 | (_1 % 2)' # FIXME for gcc. Add fr_t::operator bool() ?
scc -a45 'v9 | var(true) || plus_'
# folding
scc -a45 'v9 || (_1+_2)'
scc -a1 'v9 || var(true)'
scc -a0 '*+(v9 * _1);'
# <<
scc -a1 '(_1 << 1)(v9)++'
scc -a1 '(v9 << _1)(1)++'
scc '(cout << _1)(1); (cout << _1)(v9);'
# contentsof
scc -a0 '*((+_1)(v9))'
scc -a0 ' ((*_1)(+v9))'
scc -a0 ' ((*+_1)(v9))'
scc -a1 'int i=1; int *p=&i; int **pp=&p; (**_1)(pp)'
###################################### mapped_range
scc -a10 'range(5) * _1 || plus_'
scc -a10 'range(10) * var(1) || plus_'
scc -a10 'range(5) * (_1+0) || plus_'
scc 'int sum=0; for(auto i: range(5) * _1) sum+= i;'
scc 'v9 * (_1+0)'
scc 'v9 * (_1==1)'
scc 'v9 * _1'
scc 'v9 * var(1)'
# side effects
scc 'v9 | (cout << _1) || plus_;'
scc 'eval(v9 * (cout << _1 ));'
scc '(v9 | (cout << _1)) || nop;'
scc 'vector<int*> va; eval(v9 * (va << &_1)); va * *_1 | reverse'
# & / ->
# FIXME scc 'm9 * (_1.first)'
# FIXME scc 'm9 * ((&_1)->first)'
# comma op
scc -a1 'i=0; (_1=1, ++_1)(i)==2 && i==2'
scc -a1 'i=0; (++_1, ++_1)(i)==i && i==2'
#scc 'v9 * (*oi = _1);' # TOFIX
# multi index
#scc 'typedef tuple<str,int> rec; vector<rec> v {MT("xxx",3),MT("aaa",2),MT("zzz",1)}; vec<rec*> vp1, vp2; v*(vp1<<&_1)||nop; vp1**_1|sort; vp2**_2'
# function call
#scc '(strlen(_1))("abc")' # TOFIX
: '- - - - - - - - - - - - - - - - - - - - - - U-LAMBDA passed - -- - - - - - - - - - - - - - - - - - - - -'