| 1 | import x.json2 as json |
| 2 | import time |
| 3 | |
| 4 | const fixed_time = time.new( |
| 5 | year: 2022 |
| 6 | month: 3 |
| 7 | day: 11 |
| 8 | hour: 13 |
| 9 | minute: 54 |
| 10 | second: 25 |
| 11 | ) |
| 12 | |
| 13 | type StringAlias = string |
| 14 | type BoolAlias = bool |
| 15 | type IntAlias = int |
| 16 | type TimeAlias = time.Time |
| 17 | type StructAlias = StructType[int] |
| 18 | type EnumAlias = Enumerates |
| 19 | |
| 20 | type SumTypes = bool | int | string |
| 21 | |
| 22 | enum Enumerates { |
| 23 | a |
| 24 | b |
| 25 | c |
| 26 | d |
| 27 | e = 99 |
| 28 | f |
| 29 | } |
| 30 | |
| 31 | struct StructType[T] { |
| 32 | mut: |
| 33 | val T |
| 34 | } |
| 35 | |
| 36 | struct StructTypeOption[T] { |
| 37 | mut: |
| 38 | val ?T |
| 39 | } |
| 40 | |
| 41 | struct StructTypePointer[T] { |
| 42 | mut: |
| 43 | val &T |
| 44 | } |
| 45 | |
| 46 | fn test_option_types() { |
| 47 | assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.a }) == '{"val":0}' |
| 48 | assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.d }) == '{"val":3}' |
| 49 | assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.e }) == '{"val":99}' |
| 50 | assert json.encode(StructTypeOption[Enumerates]{ val: Enumerates.f }) == '{"val":100}' |
| 51 | } |
| 52 | |
| 53 | fn test_option_alias() { |
| 54 | assert json.encode(StructTypeOption[BoolAlias]{ val: none }) == '{}' |
| 55 | assert json.encode(StructTypeOption[BoolAlias]{}) == '{"val":false}' |
| 56 | assert json.encode(StructTypeOption[BoolAlias]{ val: false }) == '{"val":false}' |
| 57 | assert json.encode(StructTypeOption[BoolAlias]{ val: true }) == '{"val":true}' |
| 58 | |
| 59 | assert json.encode(StructTypeOption[IntAlias]{ val: none }) == '{}' |
| 60 | assert json.encode(StructTypeOption[IntAlias]{}) == '{"val":0}' |
| 61 | assert json.encode(StructTypeOption[IntAlias]{ val: 0 }) == '{"val":0}' |
| 62 | assert json.encode(StructTypeOption[IntAlias]{ val: 1 }) == '{"val":1}' |
| 63 | |
| 64 | assert json.encode(StructTypeOption[EnumAlias]{}) == '{"val":0}' |
| 65 | assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.a }) == '{"val":0}' |
| 66 | assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.d }) == '{"val":3}' |
| 67 | assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.e }) == '{"val":99}' |
| 68 | assert json.encode(StructTypeOption[EnumAlias]{ val: Enumerates.f }) == '{"val":100}' |
| 69 | } |
| 70 | |
| 71 | fn test_alias() { |
| 72 | assert json.encode(StructType[EnumAlias]{}) == '{"val":0}' |
| 73 | assert json.encode(StructType[EnumAlias]{ val: Enumerates.a }) == '{"val":0}' |
| 74 | assert json.encode(StructType[EnumAlias]{ val: Enumerates.d }) == '{"val":3}' |
| 75 | assert json.encode(StructType[EnumAlias]{ val: Enumerates.e }) == '{"val":99}' |
| 76 | assert json.encode(StructType[EnumAlias]{ val: Enumerates.f }) == '{"val":100}' |
| 77 | } |
| 78 | |
| 79 | fn test_sumtypes() { |
| 80 | assert json.encode(StructType[SumTypes]{}) == '{}' |
| 81 | assert json.encode(StructType[SumTypes]{ val: '' }) == '{"val":""}' |
| 82 | assert json.encode(StructType[SumTypes]{ val: 'a' }) == '{"val":"a"}' |
| 83 | |
| 84 | assert json.encode(StructType[SumTypes]{ val: false }) == '{"val":false}' |
| 85 | assert json.encode(StructType[SumTypes]{ val: true }) == '{"val":true}' |
| 86 | |
| 87 | assert json.encode(StructType[SumTypes]{ val: 0 }) == '{"val":0}' |
| 88 | assert json.encode(StructType[SumTypes]{ val: 1 }) == '{"val":1}' |
| 89 | |
| 90 | assert json.encode(StructType[StructType[SumTypes]]{ |
| 91 | val: StructType[SumTypes]{ |
| 92 | val: 1 |
| 93 | } |
| 94 | }) == '{"val":{"val":1}}' |
| 95 | } |
| 96 | |
| 97 | fn test_option_sumtypes() { |
| 98 | assert json.encode(StructTypeOption[SumTypes]{}) == '{}' // REVIEW |
| 99 | |
| 100 | assert json.encode(StructTypeOption[SumTypes]{ val: '' }) == '{"val":""}' |
| 101 | assert json.encode(StructTypeOption[SumTypes]{ val: 'a' }) == '{"val":"a"}' |
| 102 | |
| 103 | assert json.encode(StructTypeOption[SumTypes]{ val: false }) == '{"val":false}' |
| 104 | assert json.encode(StructTypeOption[SumTypes]{ val: true }) == '{"val":true}' |
| 105 | |
| 106 | assert json.encode(StructTypeOption[SumTypes]{ val: 0 }) == '{"val":0}' |
| 107 | assert json.encode(StructTypeOption[SumTypes]{ val: 1 }) == '{"val":1}' |
| 108 | } |
| 109 | |
| 110 | fn test_caos() { |
| 111 | typed_string_struct := StructType[string]{ |
| 112 | val: 'a' |
| 113 | } |
| 114 | |
| 115 | // StructType |
| 116 | assert json.encode(StructType[StructType]{}) == 'TODO' |
| 117 | assert json.encode(StructType[StructType[string]]{ val: typed_string_struct }) == 'TODO' |
| 118 | assert json.encode(StructType[StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO' |
| 119 | assert json.encode(StructType[StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO' |
| 120 | |
| 121 | assert json.encode(StructType[StructTypeOption]{typed_string_struct}) == 'TODO' |
| 122 | assert json.encode(StructType[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 123 | assert json.encode(StructType[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 124 | assert json.encode(StructType[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 125 | |
| 126 | assert json.encode(StructType[StructTypePointer]{typed_string_struct}) == 'TODO' |
| 127 | assert json.encode(StructType[StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 128 | assert json.encode(StructType[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 129 | assert json.encode(StructType[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 130 | |
| 131 | // StructTypeOptional |
| 132 | assert json.encode(StructTypeOption[StructType]{}) == 'TODO' |
| 133 | assert json.encode(StructTypeOption[StructType[string]]{ val: '' }) == 'TODO' |
| 134 | assert json.encode(StructTypeOption[StructType[StringAlias]]{ val: '' }) == 'TODO' |
| 135 | assert json.encode(StructTypeOption[StructType[SumTypes]]{ val: '' }) == 'TODO' |
| 136 | |
| 137 | assert json.encode(StructTypeOption[StructTypeOption]{typed_string_struct}) == 'TODO' |
| 138 | assert json.encode(StructTypeOption[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 139 | assert json.encode(StructTypeOption[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 140 | assert json.encode(StructTypeOption[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 141 | |
| 142 | assert json.encode(StructTypeOption[StructTypePointer]{typed_string_struct}) == 'TODO' |
| 143 | assert json.encode(StructTypeOption[StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 144 | assert json.encode(StructTypeOption[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 145 | assert json.encode(StructTypeOption[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 146 | |
| 147 | // StructTypePointer |
| 148 | assert json.encode(StructTypePointer[StructType]{}) == 'TODO' |
| 149 | assert json.encode(StructTypePointer[StructType[string]]{ val: '' }) == 'TODO' |
| 150 | assert json.encode(StructTypePointer[StructType[StringAlias]]{ val: '' }) == 'TODO' |
| 151 | assert json.encode(StructTypePointer[StructType[SumTypes]]{ val: '' }) == 'TODO' |
| 152 | |
| 153 | assert json.encode(StructTypePointer[StructTypeOption]{typed_string_struct}) == 'TODO' |
| 154 | assert json.encode(StructTypePointer[StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 155 | assert json.encode(StructTypePointer[StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 156 | assert json.encode(StructTypePointer[StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 157 | |
| 158 | assert json.encode(StructTypePointer[StructTypePointer]{typed_string_struct}) == 'TODO' |
| 159 | assert json.encode(StructTypePointer[StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 160 | assert json.encode(StructTypePointer[StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 161 | assert json.encode(StructTypePointer[StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 162 | } |
| 163 | |
| 164 | fn test_caos_array() { |
| 165 | typed_string_struct := [StructType[string]{ |
| 166 | val: 'a' |
| 167 | }] |
| 168 | |
| 169 | // StructType |
| 170 | assert json.encode(StructType[[]StructType]{}) == 'TODO' |
| 171 | assert json.encode(StructType[[]StructType[string]]{ val: typed_string_struct }) == 'TODO' |
| 172 | assert json.encode(StructType[[]StructType[StringAlias]]{ val: typed_string_struct }) == 'TODO' |
| 173 | assert json.encode(StructType[[]StructType[SumTypes]]{ val: typed_string_struct }) == 'TODO' |
| 174 | |
| 175 | assert json.encode(StructType[[]StructTypeOption]{typed_string_struct}) == 'TODO' |
| 176 | assert json.encode(StructType[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 177 | assert json.encode(StructType[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 178 | assert json.encode(StructType[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 179 | |
| 180 | assert json.encode(StructType[[]StructTypePointer]{typed_string_struct}) == 'TODO' |
| 181 | assert json.encode(StructType[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 182 | assert json.encode(StructType[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 183 | assert json.encode(StructType[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 184 | |
| 185 | // StructTypeOptional |
| 186 | assert json.encode(StructTypeOption[[]StructType]{}) == 'TODO' |
| 187 | assert json.encode(StructTypeOption[[]StructType[string]]{ val: '' }) == 'TODO' |
| 188 | assert json.encode(StructTypeOption[[]StructType[StringAlias]]{ val: '' }) == 'TODO' |
| 189 | assert json.encode(StructTypeOption[[]StructType[SumTypes]]{ val: '' }) == 'TODO' |
| 190 | |
| 191 | assert json.encode(StructTypeOption[[]StructTypeOption]{typed_string_struct}) == 'TODO' |
| 192 | assert json.encode(StructTypeOption[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 193 | assert json.encode(StructTypeOption[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 194 | assert json.encode(StructTypeOption[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 195 | |
| 196 | assert json.encode(StructTypeOption[[]StructTypePointer]{typed_string_struct}) == 'TODO' |
| 197 | assert json.encode(StructTypeOption[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 198 | assert json.encode(StructTypeOption[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 199 | assert json.encode(StructTypeOption[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 200 | |
| 201 | // StructTypePointer |
| 202 | assert json.encode(StructTypePointer[[]StructType]{}) == 'TODO' |
| 203 | assert json.encode(StructTypePointer[[]StructType[string]]{ val: '' }) == 'TODO' |
| 204 | assert json.encode(StructTypePointer[[]StructType[StringAlias]]{ val: '' }) == 'TODO' |
| 205 | assert json.encode(StructTypePointer[[]StructType[SumTypes]]{ val: '' }) == 'TODO' |
| 206 | |
| 207 | assert json.encode(StructTypePointer[[]StructTypeOption]{typed_string_struct}) == 'TODO' |
| 208 | assert json.encode(StructTypePointer[[]StructTypeOption[string]]{ val: StructType{'a'} }) == 'TODO' |
| 209 | assert json.encode(StructTypePointer[[]StructTypeOption[StringAlias]]{typed_string_struct}) == 'TODO' |
| 210 | assert json.encode(StructTypePointer[[]StructTypeOption[SumTypes]]{typed_string_struct}) == 'TODO' |
| 211 | |
| 212 | assert json.encode(StructTypePointer[[]StructTypePointer]{typed_string_struct}) == 'TODO' |
| 213 | assert json.encode(StructTypePointer[[]StructTypePointer[string]]{typed_string_struct}) == 'TODO' |
| 214 | assert json.encode(StructTypePointer[[]StructTypePointer[StringAlias]]{typed_string_struct}) == 'TODO' |
| 215 | assert json.encode(StructTypePointer[[]StructTypePointer[SumTypes]]{typed_string_struct}) == 'TODO' |
| 216 | } |
| 217 | |