mirror of
https://github.com/gorules/zen.git
synced 2026-10-04 16:02:18 +00:00
* feat: implement new functions - part 1 * add enumiter to BuiltInFunction * fix ci * remove centos test * fix workflow
7.2 KiB
7.2 KiB
| 1 | expression (string);input (json 5);output (json 5) | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | # Boolean | |||||||||||
| 3 | true and true;;true | |||||||||||
| 4 | true and false;;false | |||||||||||
| 5 | false and true;;false | |||||||||||
| 6 | false and false;;false | |||||||||||
| 7 | true or true;;true | |||||||||||
| 8 | true or false;;true | |||||||||||
| 9 | false or true;;true | |||||||||||
| 10 | false or false;;false | |||||||||||
| 11 | not true;;false | |||||||||||
| 12 | not false;;true | |||||||||||
| 13 | # Numbers | |||||||||||
| 14 | 1 == 1;;true | |||||||||||
| 15 | 1 == 2;;false | |||||||||||
| 16 | 1 != 2;;true | |||||||||||
| 17 | 1 != 1;;false | |||||||||||
| 18 | 1 < 2;;true | |||||||||||
| 19 | 1 < 1;;false | |||||||||||
| 20 | 1 <= 1;;true | |||||||||||
| 21 | 2 <= 1;;false | |||||||||||
| 22 | 2 > 1;;true | |||||||||||
| 23 | 1 > 1;;false | |||||||||||
| 24 | 1 >= 1;;true | |||||||||||
| 25 | 1 >= 2;;false | |||||||||||
| 26 | -1 == -1;;true | |||||||||||
| 27 | -1 == 1;;false | |||||||||||
| 28 | -1 != 1;;true | |||||||||||
| 29 | -1 != -1;;false | |||||||||||
| 30 | -1 < 1;;true | |||||||||||
| 31 | -1 < -1;;false | |||||||||||
| 32 | -1 <= -1;;true | |||||||||||
| 33 | 1 <= -1;;false | |||||||||||
| 34 | 1 > -1;;true | |||||||||||
| 35 | -1 > -1;;false | |||||||||||
| 36 | -1 >= -1;;true | |||||||||||
| 37 | -1 >= 1;;false | |||||||||||
| 38 | 1 + 2 == 3;;true | |||||||||||
| 39 | 1 + 2 == 4;;false | |||||||||||
| 40 | 1 - 2 == -1;;true | |||||||||||
| 41 | 1 - 2 == 0;;false | |||||||||||
| 42 | 2 * 3 == 6;;true | |||||||||||
| 43 | 2 * 3 == 7;;false | |||||||||||
| 44 | 6 / 3 == 2;;true | |||||||||||
| 45 | 6 / 3 == 2.5;;false | |||||||||||
| 46 | 5 % 2 == 1;;true | |||||||||||
| 47 | 6 % 2 == 0;;true | |||||||||||
| 48 | -5 + 5 == 0;;true | |||||||||||
| 49 | -5 * 5 == -25;;true | |||||||||||
| 50 | -5 * -5 == 25;;true | |||||||||||
| 51 | abs(-5) == 5;;true | |||||||||||
| 52 | abs(5) == 5;;true | |||||||||||
| 53 | 2 ^ 3 == 8;;true | |||||||||||
| 54 | 2 ^ -1 == 0.5;;true | |||||||||||
| 55 | max([3 | 5]) == 5;;true | ||||||||||
| 56 | max([-3 | -5]) == -3;;true | ||||||||||
| 57 | min([3 | 5]) == 3;;true | ||||||||||
| 58 | min([-3 | -5]) == -5;;true | ||||||||||
| 59 | 3 + 4 * 2;;11 | |||||||||||
| 60 | (3 + 4) * 2;;14 | |||||||||||
| 61 | (10 - 4) / 2;;3 | |||||||||||
| 62 | abs(-5);;5 | |||||||||||
| 63 | sum([1 | 2 | 3 | 4 | 5]);;15 | |||||||
| 64 | avg([10 | 20 | 30]);;20 | |||||||||
| 65 | min([5 | 8 | 2 | 11 | 7]);;2 | |||||||
| 66 | max([5 | 8 | 2 | 11 | 7]);;11 | |||||||
| 67 | floor(4.8);;4 | |||||||||||
| 68 | ceil(4.1);;5 | |||||||||||
| 69 | round(3.5);;4 | |||||||||||
| 70 | rand(100) >= 0 and rand(100) <= 100;;true | |||||||||||
| 71 | median([4 | 2 | 7 | 5 | 3]);;4 | |||||||
| 72 | mode([1 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 | 4]);;4 | ||
| 73 | 5 % 2 == 1;;true | |||||||||||
| 74 | 10 % 4 == 2;;true | |||||||||||
| 75 | true ? 10 == 10 : 20 == 30;;true | |||||||||||
| 76 | false ? 10 == 10 : 20 == 30;;false | |||||||||||
| 77 | true ? 10 == 20 : false ? 30 == 40 : true ? 50 == 60 : 70 == 80;;false | |||||||||||
| 78 | # String | |||||||||||
| 79 | # String Slice | |||||||||||
| 80 | string[0:5];{string: 'sample_string'};'sample' | |||||||||||
| 81 | string[7:12];{string: 'sample_string'};'string' | |||||||||||
| 82 | string[7:];{string: 'sample_string'};'string' | |||||||||||
| 83 | string[:5];{string: 'sample_string'};'sample' | |||||||||||
| 84 | # Array | |||||||||||
| 85 | len([1 | 2 | 3 | 4 | 5]);; 5 | |||||||
| 86 | sum([1 | 2 | 3 | 4 | 5]);; 15 | |||||||
| 87 | avg([10 | 20 | 30]);; 20 | |||||||||
| 88 | min([5 | 8 | 2 | 11 | 7]);; 2 | |||||||
| 89 | max([5 | 8 | 2 | 11 | 7]);; 11 | |||||||
| 90 | contains([1 | 2 | 3 | 4 | 5] | 3);; true | ||||||
| 91 | contains([1 | 2 | 3 | 4 | 5] | 6);; false | ||||||
| 92 | count([1 | 2 | 3 | 4 | 5 | 2] | # == 2);; 2 | |||||
| 93 | filter([1 | 2 | 3 | 4 | 5] | # > 3);; [4 | 5] | |||||
| 94 | map([1 | 2 | 3 | 4 | 5] | # * 2);; [2 | 4 | 6 | 8 | 10] | ||
| 95 | one([1 | 2 | 3 | 4 | 5] | # == 3);; true | ||||||
| 96 | one([1 | 2 | 3 | 4 | 5] | # == 6);; false | ||||||
| 97 | none([1 | 2 | 3 | 4 | 5] | # > 5);; true | ||||||
| 98 | some([1 | 2 | 3 | 4 | 5] | # > 3);; true | ||||||
| 99 | flatMap([[1 | 2] | [3 | 4] | [5 | 6]] | #);; [1 | 2 | 3 | 4 | 5 | 6] |
| 100 | keys([10 | 11 | 12]);;[0 | 1 | 2] | |||||||
| 101 | # Dates | |||||||||||
| 102 | # Decimal precision | |||||||||||
| 103 | 0.1 + 0.2 == 0.3;; true | |||||||||||
| 104 | 0.1 + 0.2;; 0.3 | |||||||||||
| 105 | 0.1 * 0.2 == 0.02;; true | |||||||||||
| 106 | 0.1 * 0.2;; 0.02 | |||||||||||
| 107 | 0.3 - 0.1 == 0.2;; true | |||||||||||
| 108 | 0.3 - 0.1;; 0.2 | |||||||||||
| 109 | 0.3 / 0.1 == 3.0;; true | |||||||||||
| 110 | 0.3 / 0.1;; 3 | |||||||||||
| 111 | # More complex formulas | |||||||||||
| 112 | (10 + 5) * 3 / 2 > 15;; true | |||||||||||
| 113 | (100 - 25) / (5 * 2) < 10;; true | |||||||||||
| 114 | 1000 / (10 - 2) + 50 == 175;; true | |||||||||||
| 115 | (3 + 4) * (8 - 6) == 14;; true | |||||||||||
| 116 | 10^3 != 999;; true | |||||||||||
| 117 | 1000 / 10^3 <= 1.1;; true | |||||||||||
| 118 | abs(-20) > 10;; true | |||||||||||
| 119 | floor(8.9) == 8;; true | |||||||||||
| 120 | ceil(8.1) == 9;; true | |||||||||||
| 121 | round(7.6) == 8;; true | |||||||||||
| 122 | 10 % 3 != 0;; true | |||||||||||
| 123 | -8 + 2^3 == 0;; true | |||||||||||
| 124 | 2 * -(-5) == 10;; true | |||||||||||
| 125 | 20 / (5 / 2) == 8.0;; true | |||||||||||
| 126 | (4 + 2) * 3 - (5 / 2) + 1 < 18;; true | |||||||||||
| 127 | 5^2 + 3 * 4 - 6 / 2 > 20;; true | |||||||||||
| 128 | 4^3 - 2 * 5 + 7 / 2 == 57.5;; true | |||||||||||
| 129 | abs(-7 + 4) * (8 - 6^2) < 34;; true | |||||||||||
| 130 | 5 in [1..10];; true | |||||||||||
| 131 | 5 in (1..10);; true | |||||||||||
| 132 | 5 not in [1..10);; false | |||||||||||
| 133 | 5 not in (1..10);; false | |||||||||||
| 134 | -5 in [-10..-1];; true | |||||||||||
| 135 | -5 in [-10..-1);; true | |||||||||||
| 136 | -5 not in [-10..-1];; false | |||||||||||
| 137 | -5 not in [-10..-1);; false | |||||||||||
| 138 | -5 in [-5..5];; true | |||||||||||
| 139 | -5 in (-5..5);; false | |||||||||||
| 140 | -5 not in [-5..5);; false | |||||||||||
| 141 | -5 not in (-5..5);; true | |||||||||||
| 142 | 10 > 5;; true | |||||||||||
| 143 | 5 < 10;; true | |||||||||||
| 144 | 10 >= 10;; true | |||||||||||
| 145 | 5 <= 5;; true | |||||||||||
| 146 | (1 + 2) == 3;; true | |||||||||||
| 147 | (1 + 2) != 4;; true | |||||||||||
| 148 | (1 + 2) > 2;; true | |||||||||||
| 149 | (1 + 2) < 5;; true | |||||||||||
| 150 | # Date Functions | |||||||||||
| 151 | dateString(startOf('2023-01-01 15:45:01' | 'day'));;'2023-01-01 00:00:00' | ||||||||||
| 152 | dateString(endOf('2023-01-01 15:45:01' | 'd'));;'2023-01-01 23:59:59' | ||||||||||
| 153 | dateString(startOf('2023-01-01 15:45:01' | 'hour'));;'2023-01-01 15:00:00' | ||||||||||
| 154 | dateString(endOf('2023-01-01 15:45:01' | 'h'));;'2023-01-01 15:59:59' | ||||||||||
| 155 | dateString(startOf('2023-01-01 15:45:01' | 'minute'));;'2023-01-01 15:45:00' | ||||||||||
| 156 | dateString(endOf('2023-01-01 15:45:01' | 'm'));;'2023-01-01 15:45:59' | ||||||||||
| 157 | dateString(startOf('2023-01-04 15:45:01' | 'week'));;'2023-01-02 00:00:00' | ||||||||||
| 158 | dateString(endOf('2023-01-04 15:45:01' | 'w'));;'2023-01-08 23:59:59' | ||||||||||
| 159 | dateString(startOf('2023-01-04 15:45:01' | 'month'));;'2023-01-01 00:00:00' | ||||||||||
| 160 | dateString(endOf('2023-01-04 15:45:01' | 'M'));;'2023-01-31 23:59:59' | ||||||||||
| 161 | dateString(startOf('2023-01-04 15:45:01' | 'year'));;'2023-01-01 00:00:00' | ||||||||||
| 162 | dateString(endOf('2023-01-04 15:45:01' | 'y'));;'2023-12-31 23:59:59' | ||||||||||
| 163 | # Type conversions | |||||||||||
| 164 | string(123.123);;'123.123' | |||||||||||
| 165 | string(123);;'123' | |||||||||||
| 166 | string(true);;'true' | |||||||||||
| 167 | string(false);;'false' | |||||||||||
| 168 | string('already string');;'already string' | |||||||||||
| 169 | number('123.123');;123.123 | |||||||||||
| 170 | number('123');;123 | |||||||||||
| 171 | number(123.123);;123.123 | |||||||||||
| 172 | number(123);;123 | |||||||||||
| 173 | number(true);;1 | |||||||||||
| 174 | number(false);;0 | |||||||||||
| 175 | # Type check | |||||||||||
| 176 | isNumeric(123.123);;true | |||||||||||
| 177 | isNumeric(123);;true | |||||||||||
| 178 | isNumeric('123.123');;true | |||||||||||
| 179 | isNumeric('123');;true | |||||||||||
| 180 | isNumeric('string');;false | |||||||||||
| 181 | isNumeric(true);;false | |||||||||||
| 182 | # Types | |||||||||||
| 183 | type('hello');;'string' | |||||||||||
| 184 | type(123);;'number' | |||||||||||
| 185 | type(true);;'bool' | |||||||||||
| 186 | type(null);;'null' | |||||||||||
| 187 | type([1 | 2 | 3]);;'array' | |||||||||
| 188 | # Object | |||||||||||
| 189 | # Nullish coalescing | |||||||||||
| 190 | null ?? 'hello';;'hello' | |||||||||||
| 191 | null ?? 123 ?? 321;;123 | |||||||||||
| 192 | null ?? null ?? 321;;321 | |||||||||||
| 193 | false or true ? null ?? 'test' : false;;'test' |