├── .gitignore
├── .gitmodules
├── .travis.yml
├── README.md
├── bin
└── jsedn
├── build.sh
├── component.json
├── index.html
├── index.js
├── jsedn.js
├── lib
├── atPath.js
├── atoms.js
├── collections.js
├── compile.js
├── encode.js
├── memo.js
├── reader.js
├── tags.js
├── tokens.js
├── type.js
└── unify.js
├── package.json
├── src
├── atPath.coffee
├── atoms.coffee
├── collections.coffee
├── compile.coffee
├── encode.coffee
├── memo.coffee
├── reader.coffee
├── tags.coffee
├── tokens.coffee
├── type.coffee
└── unify.coffee
└── test
├── all-edn-tests.coffee
├── all-invalid-edn-tests.coffee
├── assertion.coffee
├── perf.coffee
├── performance-json
├── items.edn
├── large-keyword-map.json
├── large-symbol-map.json
├── list-of-nil.json
├── map-of-maps.json
├── map-tree.json
├── mixed-vector.json
├── set-of-keywords.json
├── set-of-longs.json
├── set-of-symbols.json
├── vector-of-bigdecs.json
├── vector-of-bigints.json
├── vector-of-booleans.json
├── vector-of-chars.json
├── vector-of-doubles.json
├── vector-of-instants.json
├── vector-of-ints.json
├── vector-of-keywords.json
├── vector-of-longs.json
├── vector-of-maps.json
├── vector-of-nil.json
├── vector-of-strings.json
├── vector-of-symbols.json
├── vector-of-uuid.json
├── vector-of-vectors.json
└── vector-tree.json
├── performance-tests.coffee
├── primitives.coffee
├── test.edn
└── unify.coffee
/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /components
3 | /node_modules
4 | .nyc_output
5 | coverage
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "test/edn-tests"]
2 | path = test/edn-tests
3 | url = https://github.com/shaunxcode/edn-tests.git
4 |
5 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "0.12"
4 | - "4"
5 | - "6"
6 | - "7"
7 | before_script:
8 | - git submodule update --init
9 | after_script:
10 | - coveralls < coverage/lcov.info
11 | env:
12 | - CXX=g++-4.8
13 | addons:
14 | apt:
15 | sources:
16 | - ubuntu-toolchain-r-test
17 | packages:
18 | - g++-4.8
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | jsedn
2 | =====
3 |
4 | A javascript implementation of [edn](https://github.com/edn-format/edn). To see it in action checkout the [edn playground](https://shaunxcode.github.com/jsedn). If you open your browser console you will have access to a global jsedn object with which you can try things beside JSON encoding. I recommend `jsedn.unify("[?x was always better than ?y]", {x: "sonic", y: "mario"}).jsEncode()`.
5 |
6 | [](https://travis-ci.org/shaunxcode/jsedn)
7 | [](https://www.npmjs.com/package/jsedn)
8 | [](https://coveralls.io/github/shaunxcode/jsedn?branch=master)
9 |
10 |
11 | ## Getting Started
12 |
13 | ### Install
14 |
15 | ```bash
16 | npm install jsedn
17 | ```
18 |
19 | ### Use in a web page directly
20 | Use `jsedn.js`, which is a standalone version that will provide a global "jsedn".
21 |
22 | ### Code
23 | ```js
24 | var edn = require("jsedn");
25 | var map = edn.parse("{:a 5 [1 2] {:name :mike :age 40}}");
26 | console.log(map.at(new edn.Vector([1, 2])).at(edn.kw(":name")));
27 | ```
28 |
29 | Will output `"mike"`.
30 |
31 | Now the other way:
32 |
33 | ```js
34 | edn.encode({a: 1, "id": 333});
35 | ```
36 |
37 | Will output:
38 |
39 | ```clojure
40 | {"a" 1 "id" 333}
41 | ```
42 |
43 | Finally lets encode js into edn then back to js:
44 |
45 | ```js
46 | edn.parse(edn.encode({
47 | a: 1,
48 | b: {
49 | age: 30,
50 | feeling: ["electric", "pink"]
51 | }
52 | })).at("b").at("feeling").at(0)
53 | ```
54 | Will output `"electric"`. Definitely working in both directions.
55 |
56 | ###Command Line
57 | If you have installed via `npm` you will have a jsedn script that accepts input via pipe/stdin. Currently takes:
58 |
59 | * `-s` flag for "select" which you pass a path separated by space
60 | * `-j` encodes input as JSON
61 | * `-p` indicates pretty print for json output
62 |
63 | ```bash
64 | > echo "{:a first-item :b [{:name :walter :age 50 :kids [:A :B :C]}]}" | jsedn -s ":b 0 :kids 2"
65 | outputs: :b 0 :kids 2 => :C
66 | ```
67 |
68 | ### Testing
69 | I have developed this in a very test driven manner e.g. each test written before the next feature is implemented. Baring that in mind it means any bugs you find it would be awesome if you could edit the tests adding one which clearly indicates the bug/feature request.
70 |
71 | ```bash
72 | npm install
73 | git submodule update --init
74 | npm test
75 | ```
76 |
77 | ## API
78 | #####parse (ednString)
79 | Will turn a valid edn string into a js object structure based upon the classes details below.
80 |
81 | ```js
82 | edn.parse("{:a-keyword! [1 2 -3.4]}");
83 | ```
84 |
85 | #####encode (jsObj)
86 | Will encode both native JS and any object providing a ednEncode method.
87 |
88 | ```js
89 | edn.encode({"a-keyword!": [1,2,-3.4]});
90 | ```
91 |
92 | #####setTagAction (tag, action)
93 | Will add the tag action to be performed on any data prepended by said tag.
94 |
95 | ```js
96 | edn.setTagAction(new edn.Tag('myApp', 'tagName'), function(obj) {
97 | //do stuff with obj here and then return it
98 | var mutatedObj = thingsHandlerDoes(obj);
99 | return mutatedObj;
100 | });
101 | ```
102 |
103 | #####setTokenPattern (tokenName, pattern)
104 | If for some reason you would like to over-ride or add a new token pattern.
105 |
106 | ```js
107 | edn.setTokenPattern()))
108 | ```
109 |
110 | #####setTokenAction (tokenName, actionCallback)
111 | Allows for customization of token handling upon match. For instance if you decided you would prefer nil to be represented by undefined instead of null (default).
112 |
113 | ```js
114 | edn.setTokenAction('nil', function(token) { return undefined;});
115 | ```
116 |
117 | #####setTypeClass (type, class)
118 | This is useful if you want to over-ride the naive implementations of Map etc.
119 |
120 | ```js
121 | edn.setTypeClass('List', MyListClass));
122 | ```
123 |
124 | ##### atPath (obj, path)
125 | Simple way to lookup a value in elements returned from parse.
126 |
127 | ```js
128 | var parsed = edn.parse("[[{:name :frank :kids [{:eye-color :red} {:eye-color :blue}]}]]");
129 | edn.atPath(parsed, "0 0 :kids 1 :eye-color");
130 | ```
131 |
132 | path is a space separated string which consists of index (remember Array/Set/Vector are all 0 indexed) and key locations.
133 |
134 | ##### encodeJson
135 | Provides a json encoding including type information e.g. Vector, List, Set etc.
136 |
137 | ```js
138 | console.log(edn.encodeJson(edn.parse("[1 2 3 {:x 5 :y 6}]")));
139 | ```
140 | yields:
141 | ```js
142 | {"Vector":[1,2,3,{"Map":[{"Keyword": ":x"},5,{"Keyword":":y"},6]}]}
143 | ```
144 |
145 | ##### toJS
146 | Attempts to return a "plain" js object. Bear in mind this will yield poor results if you have any **Map** objects which utilize composite objects as keys. If an object has a **hashId** method it will use that when building the js dict.
147 |
148 | ```js
149 | var jsobj = edn.toJS(edn.parse("[1 2 {:name {:first :ray :last :cappo}}]"));
150 | ```
151 | yields:
152 | ```js
153 | [1, 2, {":name": {":first": ":ray", ":last": ":cappo"}}]
154 | ```
155 |
156 | Notice that you can not always go back the other direction. In the example above if you were to edn.parse it you would end up with:
157 |
158 | ```clojure
159 | [1 2 {":name" {":first" ":ray" ":last" ":cappo"}}]
160 | ```
161 |
162 | In which you have strings for keys instead of keywords. At one point I would "infer" that if a string started with a ":" it would be treated as a keyword. This caused more problems than it resolved which brings us to our next methods.
163 |
164 | ##### kw (string)
165 | Interns a valid keyword into an `edn.Keyword` object e.g:
166 |
167 | ```js
168 | edn.kw(":myns/kw")
169 | ```
170 |
171 | ##### sym (string)
172 | Interns a valid symbol into an `edn.Symbol` object e.g:
173 |
174 | ```js
175 | edn.sym("?name")
176 | ```
177 |
178 | ##### unify (data, values, [tokenStart])
179 | Unifies the first form with the second. Useful for populating a "data template". It accepts either edn objects or strings as arguments.
180 |
181 | ```js
182 | edn.unify("{?key1 ?key1-val ?key2 ?key2-val :all [?key1-val ?key2-val]}", "{key1 :x key1-val 200 key2 :y key2-val 300}");
183 | ```
184 | yields:
185 | ```clojure
186 | {:x 200 :y 300 :all [200 300]}
187 | ```
188 |
189 | A third argument is expected which can be used to indicate the "tokenStart" first character for unify tokens. This defaults to "?".
190 |
191 | An example with Map as data and js obj as values and changing the tokenStart to $
192 |
193 | ```js
194 | edn.unify(new edn.Map([edn.kw(":place"), edn.sym("$place")]), {place: "salt lake city"}, "$");
195 | ```
196 | yields:
197 | ```clojure
198 | {:place "salt lake city"}
199 | ```
200 |
201 | ## Classes/Interfaces
202 |
203 | #### Symbol
204 | Used to create symbols from with in js for encoding into edn.
205 |
206 | ### Keyword
207 | As above but for keywords. Note that the constructor enforced that keywords start with a ":" character.
208 |
209 | ####Iterable [List Vector Set]
210 | List, Vector and Set all implement the following methods:
211 |
212 | * `exists (key)` -> boolean indicating existance of key
213 | * `at (key)` -> value at key in collection
214 | * `set (key, val)` -> sets key/index to given value
215 | * `each (iter)` -> iterate overa all members calling iter on each, returns results
216 | * `map (iter)` -> iterate over all members calling iter on each and returning a new instace of self
217 | * `walk (iter)` -> recursively walk the data returning a new instance of self
218 |
219 | ####Map
220 | Supports any type of object as key. Supports all of the methods listed for Iterable plus `indexOf` which returns the index of the item, which can be 0 and thus non-truthy.
221 |
222 | `each`, `map` and `walk` all accept a callback which takes the value as the first argument and the key as the second. In the case of map and walk if you want to modify the key you must return a `Pair` object e.g.
223 |
224 | ```js
225 | edn.parse("{:x 300 y: 800}").map(function(val, key){
226 | return new edn.Pair(edn.kw("#{key}-squared"), val * val);
227 | });
228 | ```
229 | yields:
230 | ```clojure
231 | {:x-squared 90000 :y-squared 640000}
232 | ```
233 |
234 | ####Tag
235 | Used for defining Tag Actions. Has a constructor which accepts 2..n args where the first arg is your a namespace and the rest are used to categorize the tag. **Tag** provides two methods `ns` and `dn`:
236 |
237 | ```js
238 | var tag = new edn.Tag('myApp', 'people', 'special', 'stuff');
239 | console.log(tag.ns()); => myApp
240 | console.log(tag.dn()); => myApp/people/special/stuff
241 | ```
242 |
243 | Constructor also supports being passed single argument delimited by / e.g:
244 | ```js
245 | new edn.Tag('myApp/people/special/stuff')
246 | ```
247 |
248 | ####Tagged
249 | If you do not have tag handlers specified for a given tag you will end up with **Tagged** items in your result which have two methods:
250 |
251 | tag() -> Tag object found
252 | obj() -> Object to be tagged
253 |
254 | **Tagged** pairs can also be used when you want to serialize a js obj into edn w/ said tagging e.g.
255 |
256 | ```js
257 | edn.encode(new edn.Tagged(new edn.Tag("myApp", "Person"), {name: "walter", age: 300}));
258 | ```
259 |
260 | outputs:
261 |
262 | ```clojure
263 | #myApp/person {"name" "walter" "age" 300}
264 | ```
265 |
266 | ##Conversion Table
267 |
268 | | element | edn | jsedn | js |
269 | | --------------- | -------------------- | ------------------ | --- |
270 | | nil | ```nil``` | ```null``` | ```null``` |
271 | | boolean | ```true false``` | ```true false``` | ```true false``` |
272 | | character | ```\c``` | ```"c"``` | ```"c"``` |
273 | | string | ```"some string"``` | ```"some string"``` | ```"some string"``` |
274 | | symbol | ```?sym~b~o!ol``` | ```edn.sym "?sym~b~o!ol"``` | ```"?sym~b~o!ol"``` |
275 | | keywords | ```:keyword``` | ```edn.kw ":keyword"```| ```":keyword"``` |
276 | | integer | ```666``` | ```666``` | ```666``` |
277 | | floating point | ```-6.66``` | ```-6.66``` | ```-6.66``` |
278 | | list | ```(a b (c d))``` | ```new edn.List([edn.sym("a"), edn.sym("b"), new edn.List([edn.sym("c"), edn.sym("d")])])``` | ```["a", "b", ["c", "d"]]``` |
279 | | vector | ```[a b c]``` | ```new edn.Vector([edn.sym("a"), edn.sym("b"), edn.sym("c")])``` | ```["a", "b", "c"]``` |
280 | | map | ```{:a 1 :b 2}``` | ```new edn.Map([edn.kw(":a"), 1, edn.kw(":b"), 2])``` | ```{a: 1, b: 2}``` |
281 | | set | ```#{1 2 3}``` | ```new edn.Set([1, 2, 3])``` | ```[1 2 3]``` |
282 | | tagged elements | ```#tagName [1 2]``` | ```new edn.Tagged(new edn.Tag("tagName"), new edn.Vector([1, 2]))``` | n/a |
283 |
--------------------------------------------------------------------------------
/bin/jsedn:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | var program = require('commander');
4 | var edn = require('../index.js');
5 | var pkg = require('../package.json');
6 |
7 | program
8 | .version(pkg.version)
9 | .option('-s, --select [path]', 'select')
10 | .option('-j, --json', 'json')
11 | .option('-p, --pretty', 'pretty')
12 | .parse(process.argv);
13 |
14 | process.stdin.resume();
15 | process.stdin.setEncoding('utf8');
16 |
17 | var input = ''
18 |
19 | process.stdin.on('data', function(data) {
20 | input += data;
21 | });
22 |
23 | process.stdin.on('end', function() {
24 | var parsed = edn.parse(input);
25 | if (program.select) {
26 | console.log(program.select + " => " + edn.encode(edn.atPath(parsed, program.select)));
27 | } else if (program.json) {
28 | console.log(edn.encodeJson(parsed, program.pretty));
29 | } else {
30 | console.log(edn.encode(parsed));
31 | }
32 |
33 | process.stdin.destroy();
34 | });
35 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | coffee -o lib -c src
2 | component install
3 | component build --standalone jsedn
4 | cp build/build.js ./jsedn.js
5 |
6 |
--------------------------------------------------------------------------------
/component.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jsedn",
3 | "repo": "shaunxcode/jsedn",
4 | "description": "edn parser, encode/decode for js",
5 | "version": "0.3.4",
6 | "keywords": ["edn", "clojure", "datomic", "lisp"],
7 | "dependencies": {
8 | "jkroso/equals": "*",
9 | "component/type": "*"
10 | },
11 | "development": {
12 | "component/underscore": "*"
13 | },
14 | "scripts": [
15 | "index.js",
16 | "lib/atoms.js",
17 | "lib/atPath.js",
18 | "lib/collections.js",
19 | "lib/compile.js",
20 | "lib/encode.js",
21 | "lib/memo.js",
22 | "lib/reader.js",
23 | "lib/tags.js",
24 | "lib/tokens.js",
25 | "lib/type.js",
26 | "lib/unify.js"
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | edn playground
5 |
6 |
7 |
8 |
9 |
37 |
38 |
39 | jsedn github
40 | EDN
41 |
42 |
43 | JSON
44 |
45 |
46 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require("./lib/reader.js");
--------------------------------------------------------------------------------
/lib/atPath.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var kw;
4 |
5 | kw = require("./atoms").kw;
6 |
7 | module.exports = function(obj, path) {
8 | var part, value, _i, _len;
9 | path = path.trim().replace(/[ ]{2,}/g, ' ').split(' ');
10 | value = obj;
11 | for (_i = 0, _len = path.length; _i < _len; _i++) {
12 | part = path[_i];
13 | if (part[0] === ":") {
14 | part = kw(part);
15 | }
16 | if (value.exists) {
17 | if (value.exists(part) != null) {
18 | value = value.at(part);
19 | } else {
20 | throw "Could not find " + part;
21 | }
22 | } else {
23 | throw "Not a composite object";
24 | }
25 | }
26 | return value;
27 | };
28 |
29 | }).call(this);
30 |
--------------------------------------------------------------------------------
/lib/atoms.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var BigInt, Char, Discard, Keyword, Prim, StringObj, Symbol, bigInt, char, charMap, kw, memo, sym, type,
4 | __hasProp = {}.hasOwnProperty,
5 | __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
6 | __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
7 | __slice = [].slice;
8 |
9 | type = require("./type");
10 |
11 | memo = require("./memo");
12 |
13 | Prim = (function() {
14 |
15 | function Prim(val) {
16 | var x;
17 | if (type(val) === "array") {
18 | this.val = (function() {
19 | var _i, _len, _results;
20 | _results = [];
21 | for (_i = 0, _len = val.length; _i < _len; _i++) {
22 | x = val[_i];
23 | if (!(x instanceof Discard)) {
24 | _results.push(x);
25 | }
26 | }
27 | return _results;
28 | })();
29 | } else {
30 | this.val = val;
31 | }
32 | }
33 |
34 | Prim.prototype.value = function() {
35 | return this.val;
36 | };
37 |
38 | Prim.prototype.toString = function() {
39 | return JSON.stringify(this.val);
40 | };
41 |
42 | return Prim;
43 |
44 | })();
45 |
46 | BigInt = (function(_super) {
47 |
48 | __extends(BigInt, _super);
49 |
50 | function BigInt() {
51 | return BigInt.__super__.constructor.apply(this, arguments);
52 | }
53 |
54 | BigInt.prototype.ednEncode = function() {
55 | return this.val;
56 | };
57 |
58 | BigInt.prototype.jsEncode = function() {
59 | return this.val;
60 | };
61 |
62 | BigInt.prototype.jsonEncode = function() {
63 | return {
64 | BigInt: this.val
65 | };
66 | };
67 |
68 | return BigInt;
69 |
70 | })(Prim);
71 |
72 | StringObj = (function(_super) {
73 |
74 | __extends(StringObj, _super);
75 |
76 | function StringObj() {
77 | return StringObj.__super__.constructor.apply(this, arguments);
78 | }
79 |
80 | StringObj.prototype.toString = function() {
81 | return this.val;
82 | };
83 |
84 | StringObj.prototype.is = function(test) {
85 | return this.val === test;
86 | };
87 |
88 | return StringObj;
89 |
90 | })(Prim);
91 |
92 | charMap = {
93 | newline: "\n",
94 | "return": "\r",
95 | space: " ",
96 | tab: "\t",
97 | formfeed: "\f"
98 | };
99 |
100 | Char = (function(_super) {
101 |
102 | __extends(Char, _super);
103 |
104 | Char.prototype.ednEncode = function() {
105 | return "\\" + this.val;
106 | };
107 |
108 | Char.prototype.jsEncode = function() {
109 | return charMap[this.val] || this.val;
110 | };
111 |
112 | Char.prototype.jsonEncode = function() {
113 | return {
114 | Char: this.val
115 | };
116 | };
117 |
118 | function Char(val) {
119 | if (charMap[val] || val.length === 1) {
120 | this.val = val;
121 | } else {
122 | throw "Char may only be newline, return, space, tab, formfeed or a single character - you gave [" + val + "]";
123 | }
124 | }
125 |
126 | return Char;
127 |
128 | })(StringObj);
129 |
130 | Discard = (function() {
131 |
132 | function Discard() {}
133 |
134 | return Discard;
135 |
136 | })();
137 |
138 | Symbol = (function(_super) {
139 |
140 | __extends(Symbol, _super);
141 |
142 | Symbol.prototype.validRegex = /[0-9A-Za-z.*+!\-_?$%&=:#/]+/;
143 |
144 | Symbol.prototype.invalidFirstChars = [":", "#", "/"];
145 |
146 | Symbol.prototype.valid = function(word) {
147 | var _ref, _ref1, _ref2;
148 | if (((_ref = word.match(this.validRegex)) != null ? _ref[0] : void 0) !== word) {
149 | throw "provided an invalid symbol " + word;
150 | }
151 | if (word.length === 1 && word[0] !== "/") {
152 | if (_ref1 = word[0], __indexOf.call(this.invalidFirstChars, _ref1) >= 0) {
153 | throw "Invalid first character in symbol " + word[0];
154 | }
155 | }
156 | if (((_ref2 = word[0]) === "-" || _ref2 === "+" || _ref2 === ".") && (word[1] != null) && word[1].match(/[0-9]/)) {
157 | throw "If first char is " + word[0] + " the second char can not be numeric. You had " + word[1];
158 | }
159 | if (word[0].match(/[0-9]/)) {
160 | throw "first character may not be numeric. You provided " + word[0];
161 | }
162 | return true;
163 | };
164 |
165 | function Symbol() {
166 | var args, parts;
167 | args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
168 | switch (args.length) {
169 | case 1:
170 | if (args[0] === "/") {
171 | this.ns = null;
172 | this.name = "/";
173 | } else {
174 | parts = args[0].split("/");
175 | if (parts.length === 1) {
176 | this.ns = null;
177 | this.name = parts[0];
178 | if (this.name === ":") {
179 | throw "can not have a symbol of only :";
180 | }
181 | } else if (parts.length === 2) {
182 | this.ns = parts[0];
183 | if (this.ns === "") {
184 | throw "can not have a slash at start of symbol";
185 | }
186 | if (this.ns === ":") {
187 | throw "can not have a namespace of :";
188 | }
189 | this.name = parts[1];
190 | if (this.name.length === 0) {
191 | throw "symbol may not end with a slash.";
192 | }
193 | } else {
194 | throw "Can not have more than 1 forward slash in a symbol";
195 | }
196 | }
197 | break;
198 | case 2:
199 | this.ns = args[0];
200 | this.name = args[1];
201 | }
202 | if (this.name.length === 0) {
203 | throw "Symbol can not be empty";
204 | }
205 | this.val = "" + (this.ns ? "" + this.ns + "/" : "") + this.name;
206 | this.valid(this.val);
207 | }
208 |
209 | Symbol.prototype.toString = function() {
210 | return this.val;
211 | };
212 |
213 | Symbol.prototype.ednEncode = function() {
214 | return this.val;
215 | };
216 |
217 | Symbol.prototype.jsEncode = function() {
218 | return this.val;
219 | };
220 |
221 | Symbol.prototype.jsonEncode = function() {
222 | return {
223 | Symbol: this.val
224 | };
225 | };
226 |
227 | return Symbol;
228 |
229 | })(Prim);
230 |
231 | Keyword = (function(_super) {
232 |
233 | __extends(Keyword, _super);
234 |
235 | Keyword.prototype.invalidFirstChars = ["#", "/"];
236 |
237 | function Keyword() {
238 | Keyword.__super__.constructor.apply(this, arguments);
239 | if (this.val[0] !== ":") {
240 | throw "keyword must start with a :";
241 | }
242 | if ((this.val[1] != null) === "/") {
243 | throw "keyword can not have a slash with out a namespace";
244 | }
245 | }
246 |
247 | Keyword.prototype.jsonEncode = function() {
248 | return {
249 | Keyword: this.val
250 | };
251 | };
252 |
253 | return Keyword;
254 |
255 | })(Symbol);
256 |
257 | char = memo(Char);
258 |
259 | kw = memo(Keyword);
260 |
261 | sym = memo(Symbol);
262 |
263 | bigInt = memo(BigInt);
264 |
265 | module.exports = {
266 | Prim: Prim,
267 | Symbol: Symbol,
268 | Keyword: Keyword,
269 | StringObj: StringObj,
270 | Char: Char,
271 | Discard: Discard,
272 | BigInt: BigInt,
273 | char: char,
274 | kw: kw,
275 | sym: sym,
276 | bigInt: bigInt
277 | };
278 |
279 | }).call(this);
280 |
--------------------------------------------------------------------------------
/lib/collections.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var Iterable, List, Map, Pair, Prim, Set, Vector, encode, equals, type,
4 | __hasProp = {}.hasOwnProperty,
5 | __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
6 | __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
7 |
8 | type = require("./type");
9 |
10 | equals = require("equals");
11 |
12 | Prim = require("./atoms").Prim;
13 |
14 | encode = require("./encode").encode;
15 |
16 | Iterable = (function(_super) {
17 |
18 | __extends(Iterable, _super);
19 |
20 | function Iterable() {
21 | return Iterable.__super__.constructor.apply(this, arguments);
22 | }
23 |
24 | Iterable.prototype.hashId = function() {
25 | return this.ednEncode();
26 | };
27 |
28 | Iterable.prototype.ednEncode = function() {
29 | return (this.map(function(i) {
30 | return encode(i);
31 | })).val.join(" ");
32 | };
33 |
34 | Iterable.prototype.jsonEncode = function() {
35 | return this.map(function(i) {
36 | if (i.jsonEncode != null) {
37 | return i.jsonEncode();
38 | } else {
39 | return i;
40 | }
41 | });
42 | };
43 |
44 | Iterable.prototype.jsEncode = function() {
45 | return (this.map(function(i) {
46 | if ((i != null ? i.jsEncode : void 0) != null) {
47 | return i.jsEncode();
48 | } else {
49 | return i;
50 | }
51 | })).val;
52 | };
53 |
54 | Iterable.prototype.exists = function(index) {
55 | return this.val[index] != null;
56 | };
57 |
58 | Iterable.prototype.each = function(iter) {
59 | var i, _i, _len, _ref, _results;
60 | _ref = this.val;
61 | _results = [];
62 | for (_i = 0, _len = _ref.length; _i < _len; _i++) {
63 | i = _ref[_i];
64 | _results.push(iter(i));
65 | }
66 | return _results;
67 | };
68 |
69 | Iterable.prototype.map = function(iter) {
70 | return this.each(iter);
71 | };
72 |
73 | Iterable.prototype.walk = function(iter) {
74 | return this.map(function(i) {
75 | if ((i.walk != null) && type(i.walk) === "function") {
76 | return i.walk(iter);
77 | } else {
78 | return iter(i);
79 | }
80 | });
81 | };
82 |
83 | Iterable.prototype.at = function(index) {
84 | if (this.exists(index)) {
85 | return this.val[index];
86 | }
87 | };
88 |
89 | Iterable.prototype.set = function(index, val) {
90 | this.val[index] = val;
91 | return this;
92 | };
93 |
94 | return Iterable;
95 |
96 | })(Prim);
97 |
98 | List = (function(_super) {
99 |
100 | __extends(List, _super);
101 |
102 | function List() {
103 | return List.__super__.constructor.apply(this, arguments);
104 | }
105 |
106 | List.prototype.ednEncode = function() {
107 | return "(" + (List.__super__.ednEncode.call(this)) + ")";
108 | };
109 |
110 | List.prototype.jsonEncode = function() {
111 | return {
112 | List: List.__super__.jsonEncode.call(this)
113 | };
114 | };
115 |
116 | List.prototype.map = function(iter) {
117 | return new List(this.each(iter));
118 | };
119 |
120 | return List;
121 |
122 | })(Iterable);
123 |
124 | Vector = (function(_super) {
125 |
126 | __extends(Vector, _super);
127 |
128 | function Vector() {
129 | return Vector.__super__.constructor.apply(this, arguments);
130 | }
131 |
132 | Vector.prototype.ednEncode = function() {
133 | return "[" + (Vector.__super__.ednEncode.call(this)) + "]";
134 | };
135 |
136 | Vector.prototype.jsonEncode = function() {
137 | return {
138 | Vector: Vector.__super__.jsonEncode.call(this)
139 | };
140 | };
141 |
142 | Vector.prototype.map = function(iter) {
143 | return new Vector(this.each(iter));
144 | };
145 |
146 | return Vector;
147 |
148 | })(Iterable);
149 |
150 | Set = (function(_super) {
151 |
152 | __extends(Set, _super);
153 |
154 | Set.prototype.ednEncode = function() {
155 | return "\#{" + (Set.__super__.ednEncode.call(this)) + "}";
156 | };
157 |
158 | Set.prototype.jsonEncode = function() {
159 | return {
160 | Set: Set.__super__.jsonEncode.call(this)
161 | };
162 | };
163 |
164 | function Set(val) {
165 | var item, _i, _len;
166 | Set.__super__.constructor.call(this);
167 | this.val = [];
168 | for (_i = 0, _len = val.length; _i < _len; _i++) {
169 | item = val[_i];
170 | if (__indexOf.call(this.val, item) >= 0) {
171 | throw "set not distinct";
172 | } else {
173 | this.val.push(item);
174 | }
175 | }
176 | }
177 |
178 | Set.prototype.map = function(iter) {
179 | return new Set(this.each(iter));
180 | };
181 |
182 | return Set;
183 |
184 | })(Iterable);
185 |
186 | Pair = (function() {
187 |
188 | function Pair(key, val) {
189 | this.key = key;
190 | this.val = val;
191 | }
192 |
193 | return Pair;
194 |
195 | })();
196 |
197 | Map = (function() {
198 |
199 | Map.prototype.hashId = function() {
200 | return this.ednEncode();
201 | };
202 |
203 | Map.prototype.ednEncode = function() {
204 | var i;
205 | return "{" + (((function() {
206 | var _i, _len, _ref, _results;
207 | _ref = this.value();
208 | _results = [];
209 | for (_i = 0, _len = _ref.length; _i < _len; _i++) {
210 | i = _ref[_i];
211 | _results.push(encode(i));
212 | }
213 | return _results;
214 | }).call(this)).join(" ")) + "}";
215 | };
216 |
217 | Map.prototype.jsonEncode = function() {
218 | var i;
219 | return {
220 | Map: (function() {
221 | var _i, _len, _ref, _results;
222 | _ref = this.value();
223 | _results = [];
224 | for (_i = 0, _len = _ref.length; _i < _len; _i++) {
225 | i = _ref[_i];
226 | _results.push(i.jsonEncode != null ? i.jsonEncode() : i);
227 | }
228 | return _results;
229 | }).call(this)
230 | };
231 | };
232 |
233 | Map.prototype.jsEncode = function() {
234 | var hashId, i, k, result, _i, _len, _ref, _ref1;
235 | result = {};
236 | _ref = this.keys;
237 | for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
238 | k = _ref[i];
239 | hashId = (k != null ? k.hashId : void 0) != null ? k.hashId() : k;
240 | result[hashId] = ((_ref1 = this.vals[i]) != null ? _ref1.jsEncode : void 0) != null ? this.vals[i].jsEncode() : this.vals[i];
241 | }
242 | return result;
243 | };
244 |
245 | function Map(val) {
246 | var i, v, _i, _len, _ref;
247 | this.val = val != null ? val : [];
248 | if (this.val.length && this.val.length % 2 !== 0) {
249 | throw "Map accepts an array with an even number of items. You provided " + this.val.length + " items";
250 | }
251 | this.keys = [];
252 | this.vals = [];
253 | _ref = this.val;
254 | for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
255 | v = _ref[i];
256 | if (i % 2 === 0) {
257 | this.keys.push(v);
258 | } else {
259 | this.vals.push(v);
260 | }
261 | }
262 | this.val = false;
263 | }
264 |
265 | Map.prototype.value = function() {
266 | var i, result, v, _i, _len, _ref;
267 | result = [];
268 | _ref = this.keys;
269 | for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
270 | v = _ref[i];
271 | result.push(v);
272 | if (this.vals[i] !== void 0) {
273 | result.push(this.vals[i]);
274 | }
275 | }
276 | return result;
277 | };
278 |
279 | Map.prototype.indexOf = function(key) {
280 | var i, k, _i, _len, _ref;
281 | _ref = this.keys;
282 | for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
283 | k = _ref[i];
284 | if (equals(k, key)) {
285 | return i;
286 | }
287 | }
288 | return void 0;
289 | };
290 |
291 | Map.prototype.exists = function(key) {
292 | return this.indexOf(key) != null;
293 | };
294 |
295 | Map.prototype.at = function(key) {
296 | var id;
297 | if ((id = this.indexOf(key)) != null) {
298 | return this.vals[id];
299 | } else {
300 | throw "key does not exist";
301 | }
302 | };
303 |
304 | Map.prototype.set = function(key, val) {
305 | var id;
306 | if ((id = this.indexOf(key)) != null) {
307 | this.vals[id] = val;
308 | } else {
309 | this.keys.push(key);
310 | this.vals.push(val);
311 | }
312 | return this;
313 | };
314 |
315 | Map.prototype.each = function(iter) {
316 | var k, _i, _len, _ref, _results;
317 | _ref = this.keys;
318 | _results = [];
319 | for (_i = 0, _len = _ref.length; _i < _len; _i++) {
320 | k = _ref[_i];
321 | _results.push(iter(this.at(k), k));
322 | }
323 | return _results;
324 | };
325 |
326 | Map.prototype.map = function(iter) {
327 | var result;
328 | result = new Map;
329 | this.each(function(v, k) {
330 | var nv, _ref;
331 | nv = iter(v, k);
332 | if (nv instanceof Pair) {
333 | _ref = [nv.key, nv.val], k = _ref[0], nv = _ref[1];
334 | }
335 | return result.set(k, nv);
336 | });
337 | return result;
338 | };
339 |
340 | Map.prototype.walk = function(iter) {
341 | return this.map(function(v, k) {
342 | if (type(v.walk) === "function") {
343 | return iter(v.walk(iter), k);
344 | } else {
345 | return iter(v, k);
346 | }
347 | });
348 | };
349 |
350 | return Map;
351 |
352 | })();
353 |
354 | module.exports = {
355 | Iterable: Iterable,
356 | List: List,
357 | Vector: Vector,
358 | Set: Set,
359 | Pair: Pair,
360 | Map: Map
361 | };
362 |
363 | }).call(this);
364 |
--------------------------------------------------------------------------------
/lib/compile.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 |
4 | module.exports = function(string) {
5 | return "return require('jsedn').parse(\"" + (string.replace(/"/g, '\\"').replace(/\n/g, " ").trim()) + "\")";
6 | };
7 |
8 | }).call(this);
9 |
--------------------------------------------------------------------------------
/lib/encode.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var encode, encodeHandlers, encodeJson, tokenHandlers, type;
4 |
5 | type = require("./type");
6 |
7 | tokenHandlers = require("./tokens").tokenHandlers;
8 |
9 | encodeHandlers = {
10 | array: {
11 | test: function(obj) {
12 | return type(obj) === "array";
13 | },
14 | action: function(obj) {
15 | var v;
16 | return "[" + (((function() {
17 | var _i, _len, _results;
18 | _results = [];
19 | for (_i = 0, _len = obj.length; _i < _len; _i++) {
20 | v = obj[_i];
21 | _results.push(encode(v));
22 | }
23 | return _results;
24 | })()).join(" ")) + "]";
25 | }
26 | },
27 | integer: {
28 | test: function(obj) {
29 | return type(obj) === "number" && tokenHandlers.integer.pattern.test(obj);
30 | },
31 | action: function(obj) {
32 | return parseInt(obj);
33 | }
34 | },
35 | float: {
36 | test: function(obj) {
37 | return type(obj) === "number" && tokenHandlers.float.pattern.test(obj);
38 | },
39 | action: function(obj) {
40 | return parseFloat(obj);
41 | }
42 | },
43 | string: {
44 | test: function(obj) {
45 | return type(obj) === "string";
46 | },
47 | action: function(obj) {
48 | return "\"" + (obj.toString().replace(/"|\\/g, '\\$&')) + "\"";
49 | }
50 | },
51 | boolean: {
52 | test: function(obj) {
53 | return type(obj) === "boolean";
54 | },
55 | action: function(obj) {
56 | if (obj) {
57 | return "true";
58 | } else {
59 | return "false";
60 | }
61 | }
62 | },
63 | "null": {
64 | test: function(obj) {
65 | return type(obj) === "null";
66 | },
67 | action: function(obj) {
68 | return "nil";
69 | }
70 | },
71 | date: {
72 | test: function(obj) {
73 | return type(obj) === "date";
74 | },
75 | action: function(obj) {
76 | return "#inst \"" + (obj.toISOString()) + "\"";
77 | }
78 | },
79 | object: {
80 | test: function(obj) {
81 | return type(obj) === "object";
82 | },
83 | action: function(obj) {
84 | var k, result, v;
85 | result = [];
86 | for (k in obj) {
87 | v = obj[k];
88 | result.push(encode(k));
89 | result.push(encode(v));
90 | }
91 | return "{" + (result.join(" ")) + "}";
92 | }
93 | }
94 | };
95 |
96 | encode = function(obj) {
97 | var handler, name;
98 | if ((obj != null ? obj.ednEncode : void 0) != null) {
99 | return obj.ednEncode();
100 | }
101 | for (name in encodeHandlers) {
102 | handler = encodeHandlers[name];
103 | if (handler.test(obj)) {
104 | return handler.action(obj);
105 | }
106 | }
107 | throw "unhandled encoding for " + (JSON.stringify(obj));
108 | };
109 |
110 | encodeJson = function(obj, prettyPrint) {
111 | if (obj.jsonEncode != null) {
112 | return encodeJson(obj.jsonEncode(), prettyPrint);
113 | }
114 | if (prettyPrint) {
115 | return JSON.stringify(obj, null, 4);
116 | } else {
117 | return JSON.stringify(obj);
118 | }
119 | };
120 |
121 | module.exports = {
122 | encodeHandlers: encodeHandlers,
123 | encode: encode,
124 | encodeJson: encodeJson
125 | };
126 |
127 | }).call(this);
128 |
--------------------------------------------------------------------------------
/lib/memo.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var memo;
4 |
5 | module.exports = memo = function(klass) {
6 | memo[klass] = {};
7 | return function(val) {
8 | if (memo[klass][val] == null) {
9 | memo[klass][val] = new klass(val);
10 | }
11 | return memo[klass][val];
12 | };
13 | };
14 |
15 | }).call(this);
16 |
--------------------------------------------------------------------------------
/lib/reader.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var BigInt, Char, Discard, Iterable, Keyword, List, Map, Pair, Prim, Set, StringObj, Symbol, Tag, Tagged, Vector, bigInt, char, encode, encodeHandlers, encodeJson, escapeChar, fs, handleToken, kw, lex, parenTypes, parens, parse, read, specialChars, sym, tagActions, tokenHandlers, type, typeClasses, _ref, _ref1, _ref2, _ref3, _ref4,
4 | __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
5 |
6 | type = require("./type");
7 |
8 | _ref = require("./atoms"), Prim = _ref.Prim, Symbol = _ref.Symbol, Keyword = _ref.Keyword, StringObj = _ref.StringObj, Char = _ref.Char, Discard = _ref.Discard, BigInt = _ref.BigInt, char = _ref.char, kw = _ref.kw, sym = _ref.sym, bigInt = _ref.bigInt;
9 |
10 | _ref1 = require("./collections"), Iterable = _ref1.Iterable, List = _ref1.List, Vector = _ref1.Vector, Set = _ref1.Set, Pair = _ref1.Pair, Map = _ref1.Map;
11 |
12 | _ref2 = require("./tags"), Tag = _ref2.Tag, Tagged = _ref2.Tagged, tagActions = _ref2.tagActions;
13 |
14 | _ref3 = require("./encode"), encodeHandlers = _ref3.encodeHandlers, encode = _ref3.encode, encodeJson = _ref3.encodeJson;
15 |
16 | _ref4 = require("./tokens"), handleToken = _ref4.handleToken, tokenHandlers = _ref4.tokenHandlers;
17 |
18 | typeClasses = {
19 | Map: Map,
20 | List: List,
21 | Vector: Vector,
22 | Set: Set,
23 | Discard: Discard,
24 | Tag: Tag,
25 | Tagged: Tagged,
26 | StringObj: StringObj
27 | };
28 |
29 | parens = '()[]{}';
30 |
31 | specialChars = parens + ' \t\n\r,';
32 |
33 | escapeChar = '\\';
34 |
35 | parenTypes = {
36 | '(': {
37 | closing: ')',
38 | "class": "List"
39 | },
40 | '[': {
41 | closing: ']',
42 | "class": "Vector"
43 | },
44 | '{': {
45 | closing: '}',
46 | "class": "Map"
47 | }
48 | };
49 |
50 | lex = function(string) {
51 | var c, escaping, in_comment, in_string, line, lines, list, token, _i, _len;
52 | list = [];
53 | lines = [];
54 | line = 1;
55 | token = '';
56 | for (_i = 0, _len = string.length; _i < _len; _i++) {
57 | c = string[_i];
58 | if (c === "\n" || c === "\r") {
59 | line++;
60 | }
61 | if ((typeof in_string === "undefined" || in_string === null) && c === ";" && (typeof escaping === "undefined" || escaping === null)) {
62 | in_comment = true;
63 | }
64 | if (in_comment) {
65 | if (c === "\n") {
66 | in_comment = void 0;
67 | if (token) {
68 | list.push(token);
69 | lines.push(line);
70 | token = '';
71 | }
72 | }
73 | continue;
74 | }
75 | if (c === '"' && (typeof escaping === "undefined" || escaping === null)) {
76 | if (typeof in_string !== "undefined" && in_string !== null) {
77 | list.push(new StringObj(in_string));
78 | lines.push(line);
79 | in_string = void 0;
80 | } else {
81 | in_string = '';
82 | }
83 | continue;
84 | }
85 | if (in_string != null) {
86 | if (c === escapeChar && (typeof escaping === "undefined" || escaping === null)) {
87 | escaping = true;
88 | continue;
89 | }
90 | if (escaping != null) {
91 | escaping = void 0;
92 | if (c === "t" || c === "n" || c === "f" || c === "r") {
93 | in_string += escapeChar;
94 | }
95 | }
96 | in_string += c;
97 | } else if (__indexOf.call(specialChars, c) >= 0 && (escaping == null)) {
98 | if (token) {
99 | list.push(token);
100 | lines.push(line);
101 | token = '';
102 | }
103 | if (__indexOf.call(parens, c) >= 0) {
104 | list.push(c);
105 | lines.push(line);
106 | }
107 | } else {
108 | if (escaping) {
109 | escaping = void 0;
110 | } else if (c === escapeChar) {
111 | escaping = true;
112 | }
113 | if (token === "#_") {
114 | list.push(token);
115 | lines.push(line);
116 | token = '';
117 | }
118 | token += c;
119 | }
120 | }
121 | if (token) {
122 | list.push(token);
123 | lines.push(line);
124 | }
125 | return {
126 | tokens: list,
127 | tokenLines: lines
128 | };
129 | };
130 |
131 | read = function(ast) {
132 | var read_ahead, result, token1, tokenLines, tokens;
133 | tokens = ast.tokens, tokenLines = ast.tokenLines;
134 | read_ahead = function(token, tokenIndex, expectSet) {
135 | var L, closeParen, handledToken, paren, tagged;
136 | if (tokenIndex == null) {
137 | tokenIndex = 0;
138 | }
139 | if (expectSet == null) {
140 | expectSet = false;
141 | }
142 | if (token === void 0) {
143 | return;
144 | }
145 | if ((!(token instanceof StringObj)) && (paren = parenTypes[token])) {
146 | closeParen = paren.closing;
147 | L = [];
148 | while (true) {
149 | token = tokens.shift();
150 | if (token === void 0) {
151 | throw "unexpected end of list at line " + tokenLines[tokenIndex];
152 | }
153 | tokenIndex++;
154 | if (token === paren.closing) {
155 | return new typeClasses[expectSet ? "Set" : paren["class"]](L);
156 | } else {
157 | L.push(read_ahead(token, tokenIndex));
158 | }
159 | }
160 | } else if (__indexOf.call(")]}", token) >= 0) {
161 | throw "unexpected " + token + " at line " + tokenLines[tokenIndex];
162 | } else {
163 | handledToken = handleToken(token);
164 | if (handledToken instanceof Tag) {
165 | token = tokens.shift();
166 | tokenIndex++;
167 | if (token === void 0) {
168 | throw "was expecting something to follow a tag at line " + tokenLines[tokenIndex];
169 | }
170 | tagged = new typeClasses.Tagged(handledToken, read_ahead(token, tokenIndex, handledToken.dn() === ""));
171 | if (handledToken.dn() === "") {
172 | if (tagged.obj() instanceof typeClasses.Set) {
173 | return tagged.obj();
174 | } else {
175 | throw "Exepected a set but did not get one at line " + tokenLines[tokenIndex];
176 | }
177 | }
178 | if (tagged.tag().dn() === "_") {
179 | return new typeClasses.Discard;
180 | }
181 | if (tagActions[tagged.tag().dn()] != null) {
182 | return tagActions[tagged.tag().dn()].action(tagged.obj());
183 | }
184 | return tagged;
185 | } else {
186 | return handledToken;
187 | }
188 | }
189 | };
190 | token1 = tokens.shift();
191 | if (token1 === void 0) {
192 | return void 0;
193 | } else {
194 | result = read_ahead(token1);
195 | if (result instanceof typeClasses.Discard) {
196 | return "";
197 | }
198 | return result;
199 | }
200 | };
201 |
202 | parse = function(string) {
203 | return read(lex(string));
204 | };
205 |
206 | module.exports = {
207 | Char: Char,
208 | char: char,
209 | Iterable: Iterable,
210 | Symbol: Symbol,
211 | sym: sym,
212 | Keyword: Keyword,
213 | kw: kw,
214 | BigInt: BigInt,
215 | bigInt: bigInt,
216 | List: List,
217 | Vector: Vector,
218 | Pair: Pair,
219 | Map: Map,
220 | Set: Set,
221 | Tag: Tag,
222 | Tagged: Tagged,
223 | setTypeClass: function(typeName, klass) {
224 | if (typeClasses[typeName] != null) {
225 | module.exports[typeName] = klass;
226 | return typeClasses[typeName] = klass;
227 | }
228 | },
229 | setTagAction: function(tag, action) {
230 | return tagActions[tag.dn()] = {
231 | tag: tag,
232 | action: action
233 | };
234 | },
235 | setTokenHandler: function(handler, pattern, action) {
236 | return tokenHandlers[handler] = {
237 | pattern: pattern,
238 | action: action
239 | };
240 | },
241 | setTokenPattern: function(handler, pattern) {
242 | return tokenHandlers[handler].pattern = pattern;
243 | },
244 | setTokenAction: function(handler, action) {
245 | return tokenHandlers[handler].action = action;
246 | },
247 | setEncodeHandler: function(handler, test, action) {
248 | return encodeHandlers[handler] = {
249 | test: test,
250 | action: action
251 | };
252 | },
253 | setEncodeTest: function(type, test) {
254 | return encodeHandlers[type].test = test;
255 | },
256 | setEncodeAction: function(type, action) {
257 | return encodeHandlers[type].action = action;
258 | },
259 | parse: parse,
260 | encode: encode,
261 | encodeJson: encodeJson,
262 | toJS: function(obj) {
263 | if ((obj != null ? obj.jsEncode : void 0) != null) {
264 | return obj.jsEncode();
265 | } else {
266 | return obj;
267 | }
268 | },
269 | atPath: require("./atPath"),
270 | unify: require("./unify")(parse),
271 | compile: require("./compile")
272 | };
273 |
274 | if (typeof window === "undefined") {
275 | fs = require("fs");
276 | module.exports.readFile = function(file, cb) {
277 | return fs.readFile(file, "utf-8", function(err, data) {
278 | if (err) {
279 | throw err;
280 | }
281 | return cb(parse(data));
282 | });
283 | };
284 | module.exports.readFileSync = function(file) {
285 | return parse(fs.readFileSync(file, "utf-8"));
286 | };
287 | }
288 |
289 | }).call(this);
290 |
--------------------------------------------------------------------------------
/lib/tags.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var Prim, Tag, Tagged, tagActions, type,
4 | __slice = [].slice,
5 | __hasProp = {}.hasOwnProperty,
6 | __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
7 |
8 | Prim = require("./atoms").Prim;
9 |
10 | type = require("./type");
11 |
12 | Tag = (function() {
13 |
14 | function Tag() {
15 | var name, namespace, _ref;
16 | namespace = arguments[0], name = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
17 | this.namespace = namespace;
18 | this.name = name;
19 | if (arguments.length === 1) {
20 | _ref = arguments[0].split('/'), this.namespace = _ref[0], this.name = 2 <= _ref.length ? __slice.call(_ref, 1) : [];
21 | }
22 | }
23 |
24 | Tag.prototype.ns = function() {
25 | return this.namespace;
26 | };
27 |
28 | Tag.prototype.dn = function() {
29 | return [this.namespace].concat(this.name).join('/');
30 | };
31 |
32 | return Tag;
33 |
34 | })();
35 |
36 | Tagged = (function(_super) {
37 |
38 | __extends(Tagged, _super);
39 |
40 | function Tagged(_tag, _obj) {
41 | this._tag = _tag;
42 | this._obj = _obj;
43 | }
44 |
45 | Tagged.prototype.jsEncode = function() {
46 | return {
47 | tag: this.tag().dn(),
48 | value: this.obj().jsEncode()
49 | };
50 | };
51 |
52 | Tagged.prototype.ednEncode = function() {
53 | return "\#" + (this.tag().dn()) + " " + (require("./encode").encode(this.obj()));
54 | };
55 |
56 | Tagged.prototype.jsonEncode = function() {
57 | return {
58 | Tagged: [this.tag().dn(), this.obj().jsonEncode != null ? this.obj().jsonEncode() : this.obj()]
59 | };
60 | };
61 |
62 | Tagged.prototype.tag = function() {
63 | return this._tag;
64 | };
65 |
66 | Tagged.prototype.obj = function() {
67 | return this._obj;
68 | };
69 |
70 | Tagged.prototype.walk = function(iter) {
71 | return new Tagged(this._tag, type(this._obj.walk) === "function" ? this._obj.walk(iter) : iter(this._obj));
72 | };
73 |
74 | return Tagged;
75 |
76 | })(Prim);
77 |
78 | tagActions = {
79 | uuid: {
80 | tag: new Tag("uuid"),
81 | action: function(obj) {
82 | return obj;
83 | }
84 | },
85 | inst: {
86 | tag: new Tag("inst"),
87 | action: function(obj) {
88 | return new Date(Date.parse(obj));
89 | }
90 | }
91 | };
92 |
93 | module.exports = {
94 | Tag: Tag,
95 | Tagged: Tagged,
96 | tagActions: tagActions
97 | };
98 |
99 | }).call(this);
100 |
--------------------------------------------------------------------------------
/lib/tokens.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var Char, StringObj, Tag, bigInt, char, handleToken, kw, sym, tokenHandlers, _ref;
4 |
5 | _ref = require("./atoms"), Char = _ref.Char, StringObj = _ref.StringObj, char = _ref.char, kw = _ref.kw, sym = _ref.sym, bigInt = _ref.bigInt;
6 |
7 | Tag = require("./tags").Tag;
8 |
9 | handleToken = function(token) {
10 | var handler, name;
11 | if (token instanceof StringObj) {
12 | return token.toString();
13 | }
14 | for (name in tokenHandlers) {
15 | handler = tokenHandlers[name];
16 | if (handler.pattern.test(token)) {
17 | return handler.action(token);
18 | }
19 | }
20 | return sym(token);
21 | };
22 |
23 | tokenHandlers = {
24 | nil: {
25 | pattern: /^nil$/,
26 | action: function(token) {
27 | return null;
28 | }
29 | },
30 | boolean: {
31 | pattern: /^true$|^false$/,
32 | action: function(token) {
33 | return token === "true";
34 | }
35 | },
36 | keyword: {
37 | pattern: /^[\:].*$/,
38 | action: function(token) {
39 | return kw(token);
40 | }
41 | },
42 | char: {
43 | pattern: /^\\.*$/,
44 | action: function(token) {
45 | return char(token.slice(1));
46 | }
47 | },
48 | integer: {
49 | pattern: /^[\-\+]?[0-9]+N?$/,
50 | action: function(token) {
51 | if (/\d{15,}/.test(token)) {
52 | return bigInt(token);
53 | }
54 | return parseInt(token === "-0" ? "0" : token);
55 | }
56 | },
57 | float: {
58 | pattern: /^[\-\+]?[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?M?$/,
59 | action: function(token) {
60 | return parseFloat(token);
61 | }
62 | },
63 | tagged: {
64 | pattern: /^#.*$/,
65 | action: function(token) {
66 | return new Tag(token.slice(1));
67 | }
68 | }
69 | };
70 |
71 | module.exports = {
72 | handleToken: handleToken,
73 | tokenHandlers: tokenHandlers
74 | };
75 |
76 | }).call(this);
77 |
--------------------------------------------------------------------------------
/lib/type.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | module.exports = typeof module !== "undefined" && this.module !== module ? require("type-component") : require("type");
4 | }).call(this);
5 |
--------------------------------------------------------------------------------
/lib/unify.js:
--------------------------------------------------------------------------------
1 | // Generated by CoffeeScript 1.6.1
2 | (function() {
3 | var Map, Pair, Symbol, kw, sym, type, _ref, _ref1;
4 |
5 | type = require("./type");
6 |
7 | _ref = require("./collections"), Map = _ref.Map, Pair = _ref.Pair;
8 |
9 | _ref1 = require("./atoms"), Symbol = _ref1.Symbol, kw = _ref1.kw, sym = _ref1.sym;
10 |
11 | module.exports = function(parse) {
12 | return function(data, values, tokenStart) {
13 | var unifyToken, valExists;
14 | if (tokenStart == null) {
15 | tokenStart = "?";
16 | }
17 | if (type(data) === "string") {
18 | data = parse(data);
19 | }
20 | if (type(values) === "string") {
21 | values = parse(values);
22 | }
23 | valExists = function(v) {
24 | if (values instanceof Map) {
25 | if (values.exists(v)) {
26 | return values.at(v);
27 | } else if (values.exists(sym(v))) {
28 | return values.at(sym(v));
29 | } else if (values.exists(kw(":" + v))) {
30 | return values.at(kw(":" + v));
31 | }
32 | } else {
33 | return values[v];
34 | }
35 | };
36 | unifyToken = function(t) {
37 | var val;
38 | if (t instanceof Symbol && ("" + t)[0] === tokenStart && ((val = valExists(("" + t).slice(1))) != null)) {
39 | return val;
40 | } else {
41 | return t;
42 | }
43 | };
44 | return data.walk(function(v, k) {
45 | if (k != null) {
46 | return new Pair(unifyToken(k), unifyToken(v));
47 | } else {
48 | return unifyToken(v);
49 | }
50 | });
51 | };
52 | };
53 |
54 | }).call(this);
55 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jsedn",
3 | "description": "js implementation of edn",
4 | "version": "0.4.1",
5 | "keywords": [
6 | "lisp",
7 | "clojure",
8 | "edn",
9 | "serialization",
10 | "datomic"
11 | ],
12 | "maintainers": [
13 | {
14 | "name": "Shaun Gilchrist",
15 | "email": "shaunxcode@gmail.com",
16 | "web": "http://order-of-no.posterous.com"
17 | }
18 | ],
19 | "contributors": [
20 | {
21 | "name": "Shaun Gilchrist",
22 | "email": "shaunxcode@gmail.com",
23 | "web": "http://order-of-no.posterous.com"
24 | }
25 | ],
26 | "bugs": "http://www.github.com/shaunxcode/jsedn/issues",
27 | "licenses": [
28 | {
29 | "type": "MIT",
30 | "url": "http://www.opensource.org/licenses/mit-license.php"
31 | }
32 | ],
33 | "repository": {
34 | "type": "git",
35 | "url": "http://www.github.com/shaunxcode/jsedn"
36 | },
37 | "devDependencies": {
38 | "coffee-script": "latest",
39 | "coveralls": "^2.11.14",
40 | "microtime": "latest",
41 | "nyc": "^8.3.2",
42 | "pre-commit": "^1.1.3",
43 | "underscore": "latest"
44 | },
45 | "dependencies": {
46 | "commander": "latest",
47 | "type-component": "latest",
48 | "equals": "latest"
49 | },
50 | "bin": {
51 | "jsedn": "./bin/jsedn"
52 | },
53 | "scripts": {
54 | "test-perf": "coffee test/perf.coffee && coffee test/performance-tests.coffee",
55 | "test-spec": "coffee test/all-edn-tests.coffee && coffee test/all-invalid-edn-tests.coffee && coffee test/assertion.coffee && coffee test/primitives.coffee && coffee test/unify.coffee",
56 | "test": "npm run test-perf && nyc --extension .coffee npm run test-spec"
57 | },
58 | "nyc": {
59 | "exclude": [
60 | "test",
61 | "node_modules"
62 | ],
63 | "reporter": [
64 | "lcov",
65 | "text-summary"
66 | ]
67 | },
68 | "main": "index.js"
69 | }
70 |
--------------------------------------------------------------------------------
/src/atPath.coffee:
--------------------------------------------------------------------------------
1 | {kw} = require "./atoms"
2 |
3 | module.exports = (obj, path) ->
4 | path = path.trim().replace(/[ ]{2,}/g, ' ').split(' ')
5 | value = obj
6 | for part in path
7 | if part[0] is ":"
8 | part = kw part
9 |
10 | if value.exists
11 | if value.exists(part)?
12 | value = value.at part
13 | else
14 | throw "Could not find " + part
15 | else
16 | throw "Not a composite object"
17 | value
--------------------------------------------------------------------------------
/src/atoms.coffee:
--------------------------------------------------------------------------------
1 | type = require "./type"
2 | memo = require "./memo"
3 |
4 | class Prim
5 | constructor: (val) ->
6 | if type(val) is "array"
7 | @val = (x for x in val when (not (x instanceof Discard)))
8 | else
9 | @val = val
10 |
11 | value: -> @val
12 | toString: -> JSON.stringify @val
13 |
14 | class BigInt extends Prim
15 | ednEncode: -> @val
16 |
17 | jsEncode: -> @val
18 |
19 | jsonEncode: -> BigInt: @val
20 |
21 | class StringObj extends Prim
22 | toString: -> @val
23 | is: (test) -> @val is test
24 |
25 | charMap = newline: "\n", return: "\r", space: " ", tab: "\t", formfeed: "\f"
26 |
27 | class Char extends StringObj
28 | ednEncode: -> "\\#{@val}"
29 |
30 | jsEncode: -> charMap[@val] or @val
31 |
32 | jsonEncode: -> Char: @val
33 |
34 | constructor: (val) ->
35 | if charMap[val] or val.length is 1
36 | @val = val
37 | else
38 | throw "Char may only be newline, return, space, tab, formfeed or a single character - you gave [#{val}]"
39 |
40 | class Discard
41 |
42 | class Symbol extends Prim
43 |
44 | validRegex: /[0-9A-Za-z.*+!\-_?$%&=:#>]+/
45 |
46 | invalidFirstChars: [":", "#", "/"]
47 |
48 | valid: (word) ->
49 |
50 | if word.match(@validRegex)?[0] isnt word
51 | throw "provided an invalid symbol #{word}"
52 |
53 | if word.length is 1 and word[0] isnt "/"
54 | if word[0] in @invalidFirstChars
55 | throw "Invalid first character in symbol #{word[0]}"
56 |
57 | if word[0] in ["-", "+", "."] and word[1]? and word[1].match /[0-9]/
58 | throw "If first char is #{word[0]} the second char can not be numeric. You had #{word[1]}"
59 |
60 | if word[0].match /[0-9]/
61 | throw "first character may not be numeric. You provided #{word[0]}"
62 |
63 | true
64 |
65 | constructor: (args...) ->
66 | switch args.length
67 | when 1
68 | if args[0] is "/"
69 | @ns = null
70 | @name = "/"
71 | else
72 | parts = args[0].split "/"
73 | #e.g. new Symbol ?cat
74 | if parts.length is 1
75 | @ns = null
76 | @name = parts[0]
77 | if @name is ":"
78 | throw "can not have a symbol of only :"
79 | #e.g. new Symbol ":myPets.cats/cordelia"
80 | else if parts.length is 2
81 | @ns = parts[0]
82 | if @ns is ""
83 | throw "can not have a slash at start of symbol"
84 | if @ns is ":"
85 | throw "can not have a namespace of :"
86 | @name = parts[1]
87 | if @name.length is 0
88 | throw "symbol may not end with a slash."
89 | else
90 | throw "Can not have more than 1 forward slash in a symbol"
91 |
92 | #e.g. new Symbol ":myPets.cats", "margaret"
93 | when 2
94 | @ns = args[0]
95 | @name = args[1]
96 |
97 | if @name.length is 0
98 | throw "Symbol can not be empty"
99 |
100 | @val = "#{if @ns then "#{@ns}/" else ""}#{@name}"
101 | @valid @val
102 |
103 | toString: -> @val
104 |
105 | ednEncode: -> @val
106 |
107 | jsEncode: -> @val
108 |
109 | jsonEncode: ->
110 | Symbol: @val
111 |
112 | class Keyword extends Symbol
113 | invalidFirstChars: ["#", "/"]
114 |
115 | constructor: ->
116 | super
117 | if @val[0] isnt ":" then throw "keyword must start with a :"
118 | if @val[1]? is "/" then throw "keyword can not have a slash with out a namespace"
119 |
120 | jsonEncode: ->
121 | Keyword: @val
122 |
123 | char = memo Char
124 | kw = memo Keyword
125 | sym = memo Symbol
126 | bigInt = memo BigInt
127 |
128 | module.exports = {Prim, Symbol, Keyword, StringObj, Char, Discard, BigInt, char, kw, sym, bigInt}
129 |
--------------------------------------------------------------------------------
/src/collections.coffee:
--------------------------------------------------------------------------------
1 | type = require "./type"
2 | equals = require "equals"
3 | {Prim} = require "./atoms"
4 | {encode} = require "./encode"
5 |
6 | class Iterable extends Prim
7 | hashId: ->
8 | @ednEncode()
9 |
10 | ednEncode: ->
11 | (@map (i) -> encode i).val.join " "
12 |
13 | jsonEncode: ->
14 | (@map (i) -> if i.jsonEncode? then i.jsonEncode() else i)
15 |
16 | jsEncode: ->
17 | (@map (i) -> if i?.jsEncode? then i.jsEncode() else i).val
18 |
19 | exists: (index) ->
20 | @val[index]?
21 |
22 | each: (iter) ->
23 | (iter i for i in @val)
24 |
25 | map: (iter) ->
26 | @each iter
27 |
28 | walk: (iter) ->
29 | @map (i) ->
30 | if i.walk? and type(i.walk) is "function"
31 | i.walk iter
32 | else
33 | iter i
34 |
35 | at: (index) ->
36 | if @exists index then @val[index]
37 |
38 | set: (index, val) ->
39 | @val[index] = val
40 |
41 | this
42 |
43 | class List extends Iterable
44 | ednEncode: ->
45 | "(#{super()})"
46 |
47 | jsonEncode: ->
48 | List: super()
49 |
50 | map: (iter) ->
51 | new List @each iter
52 |
53 | class Vector extends Iterable
54 | ednEncode: ->
55 | "[#{super()}]"
56 |
57 | jsonEncode: ->
58 | Vector: super()
59 |
60 | map: (iter) ->
61 | new Vector @each iter
62 |
63 | class Set extends Iterable
64 | ednEncode: ->
65 | "\#{#{super()}}"
66 |
67 | jsonEncode: ->
68 | Set: super()
69 |
70 | constructor: (val) ->
71 | super()
72 | @val = []
73 | for item in val
74 | if item in @val
75 | throw "set not distinct"
76 | else
77 | @val.push item
78 |
79 | map: (iter) ->
80 | new Set @each iter
81 |
82 | class Pair
83 | constructor: (@key, @val) ->
84 |
85 | class Map
86 | hashId: ->
87 | @ednEncode()
88 |
89 | ednEncode: ->
90 | "{#{(encode i for i in @value()).join " "}}"
91 |
92 | jsonEncode: ->
93 | {Map: ((if i.jsonEncode? then i.jsonEncode() else i) for i in @value())}
94 |
95 | jsEncode: ->
96 | result = {}
97 | for k, i in @keys
98 | hashId = if k?.hashId? then k.hashId() else k
99 | result[hashId] = if @vals[i]?.jsEncode? then @vals[i].jsEncode() else @vals[i]
100 |
101 | result
102 |
103 | constructor: (@val = []) ->
104 | if @val.length and @val.length % 2 isnt 0
105 | throw "Map accepts an array with an even number of items. You provided #{@val.length} items"
106 |
107 | @keys = []
108 | @vals = []
109 |
110 | for v, i in @val
111 | if i % 2 is 0
112 | @keys.push v
113 | else
114 | @vals.push v
115 |
116 | @val = false
117 |
118 | value: ->
119 | result = []
120 | for v, i in @keys
121 | result.push v
122 | if @vals[i] isnt undefined then result.push @vals[i]
123 | result
124 |
125 | indexOf: (key) ->
126 | for k, i in @keys
127 | if equals k, key
128 | return i
129 | return undefined
130 |
131 | exists: (key) ->
132 | @indexOf(key)?
133 |
134 | at: (key) ->
135 | if (id = @indexOf key)?
136 | @vals[id]
137 | else
138 | throw "key does not exist"
139 |
140 | set: (key, val) ->
141 | if (id = @indexOf key)?
142 | @vals[id] = val
143 | else
144 | @keys.push key
145 | @vals.push val
146 |
147 | this
148 | each: (iter) ->
149 | ((iter (@at k), k) for k in @keys)
150 |
151 | map: (iter) ->
152 | result = new Map
153 | @each (v, k) ->
154 | nv = iter v, k
155 | if nv instanceof Pair then [k, nv] = [nv.key, nv.val]
156 | result.set k, nv
157 | result
158 |
159 | walk: (iter) ->
160 | @map (v, k) ->
161 | if type(v.walk) is "function"
162 | iter (v.walk iter), k
163 | else
164 | iter v, k
165 |
166 | module.exports = {Iterable, List, Vector, Set, Pair, Map}
167 |
--------------------------------------------------------------------------------
/src/compile.coffee:
--------------------------------------------------------------------------------
1 | module.exports = (string) ->
2 | "return require('jsedn').parse(\"#{string.replace(/"/g, '\\"').replace(/\n/g, " ").trim()}\")"
--------------------------------------------------------------------------------
/src/encode.coffee:
--------------------------------------------------------------------------------
1 | type = require "./type"
2 | {tokenHandlers} = require "./tokens"
3 |
4 | encodeHandlers =
5 | array:
6 | test: (obj) -> type(obj) is "array"
7 | action: (obj) -> "[#{(encode v for v in obj).join " "}]"
8 | integer:
9 | test: (obj) -> type(obj) is "number" and tokenHandlers.integer.pattern.test obj
10 | action: (obj) -> parseInt obj
11 | float:
12 | test: (obj) -> type(obj) is "number" and tokenHandlers.float.pattern.test obj
13 | action: (obj) -> parseFloat obj
14 | string:
15 | test: (obj) -> type(obj) is "string"
16 | action: (obj) -> "\"#{obj.toString().replace /"|\\/g, '\\$&'}\""
17 | boolean:
18 | test: (obj) -> type(obj) is "boolean"
19 | action: (obj) -> if obj then "true" else "false"
20 | null:
21 | test: (obj) -> type(obj) is "null"
22 | action: (obj) -> "nil"
23 | date:
24 | test: (obj) -> type(obj) is "date"
25 | action: (obj) -> "#inst \"#{obj.toISOString()}\""
26 | object:
27 | test: (obj) -> type(obj) is "object"
28 | action: (obj) ->
29 | result = []
30 | for k, v of obj
31 | result.push encode k
32 | result.push encode v
33 | "{#{result.join " "}}"
34 |
35 | encode = (obj) ->
36 | return obj.ednEncode() if obj?.ednEncode?
37 |
38 | for name, handler of encodeHandlers
39 | if handler.test obj
40 | return handler.action obj
41 |
42 | throw "unhandled encoding for #{JSON.stringify obj}"
43 |
44 | encodeJson = (obj, prettyPrint) ->
45 | return (encodeJson obj.jsonEncode(), prettyPrint) if obj.jsonEncode?
46 |
47 | return if prettyPrint then (JSON.stringify obj, null, 4) else JSON.stringify obj
48 |
49 | module.exports = {encodeHandlers, encode, encodeJson}
--------------------------------------------------------------------------------
/src/memo.coffee:
--------------------------------------------------------------------------------
1 | module.exports = memo = (klass) ->
2 | memo[klass] = {}
3 | (val) ->
4 | if not memo[klass][val]? then memo[klass][val] = new klass val
5 | memo[klass][val]
--------------------------------------------------------------------------------
/src/reader.coffee:
--------------------------------------------------------------------------------
1 | type = require "./type"
2 | {Prim, Symbol, Keyword, StringObj, Char, Discard, BigInt, char, kw, sym ,bigInt} = require "./atoms"
3 | {Iterable, List, Vector, Set, Pair, Map} = require "./collections"
4 | {Tag, Tagged, tagActions} = require "./tags"
5 | {encodeHandlers, encode, encodeJson} = require "./encode"
6 | {handleToken, tokenHandlers} = require "./tokens"
7 |
8 | typeClasses = {Map, List, Vector, Set, Discard, Tag, Tagged, StringObj}
9 | parens = '()[]{}'
10 | specialChars = parens + ' \t\n\r,'
11 | escapeChar = '\\'
12 | parenTypes =
13 | '(' : closing: ')', class: "List"
14 | '[' : closing: ']', class: "Vector"
15 | '{' : closing: '}', class: "Map"
16 |
17 | #based on the work of martin keefe: http://martinkeefe.com/dcpl/sexp_lib.html
18 | lex = (string) ->
19 | list = []
20 | lines = []
21 | line = 1
22 | token = ''
23 | for c in string
24 | if c in ["\n", "\r"] then line++
25 |
26 | if not in_string? and c is ";" and not escaping?
27 | in_comment = true
28 |
29 | if in_comment
30 | if c is "\n"
31 | in_comment = undefined
32 | if token
33 | list.push token
34 | lines.push line
35 | token = ''
36 | continue
37 |
38 | if c is '"' and not escaping?
39 | if in_string?
40 | list.push (new StringObj in_string)
41 | lines.push line
42 | in_string = undefined
43 | else
44 | in_string = ''
45 | continue
46 |
47 | if in_string?
48 | if c is escapeChar and not escaping?
49 | escaping = true
50 | continue
51 |
52 | if escaping?
53 | escaping = undefined
54 | if c in ["t", "n", "f", "r"]
55 | in_string += escapeChar
56 |
57 | in_string += c
58 | else if c in specialChars and not escaping?
59 | if token
60 | list.push token
61 | lines.push line
62 | token = ''
63 | if c in parens
64 | list.push c
65 | lines.push line
66 | else
67 | if escaping
68 | escaping = undefined
69 | else if c is escapeChar
70 | escaping = true
71 |
72 | if token is "#_"
73 | list.push token
74 | lines.push line
75 | token = ''
76 | token += c
77 |
78 | if token
79 | list.push(token)
80 | lines.push line
81 | {tokens: list, tokenLines: lines}
82 |
83 | #based roughly on the work of norvig from his lisp in python
84 | read = (ast) ->
85 | {tokens, tokenLines} = ast
86 |
87 | read_ahead = (token, tokenIndex = 0, expectSet = false) ->
88 | if token is undefined then return
89 |
90 | if (not (token instanceof StringObj)) and paren = parenTypes[token]
91 | closeParen = paren.closing
92 | L = []
93 | while true
94 | token = tokens.shift()
95 |
96 | if token is undefined then throw "unexpected end of list at line #{tokenLines[tokenIndex]}"
97 |
98 | tokenIndex++
99 | if token is paren.closing
100 | return new typeClasses[if expectSet then "Set" else paren.class] L
101 | else
102 | L.push read_ahead token, tokenIndex
103 |
104 | else if token in ")]}"
105 | throw "unexpected #{token} at line #{tokenLines[tokenIndex]}"
106 | else
107 | handledToken = handleToken token
108 | if handledToken instanceof Tag
109 | token = tokens.shift()
110 | tokenIndex++
111 |
112 | if token is undefined then throw "was expecting something to follow a tag at line #{tokenLines[tokenIndex]}"
113 |
114 | tagged = new typeClasses.Tagged handledToken, read_ahead token, tokenIndex, handledToken.dn() is ""
115 |
116 | if handledToken.dn() is ""
117 | if tagged.obj() instanceof typeClasses.Set
118 | return tagged.obj()
119 | else
120 | throw "Exepected a set but did not get one at line #{tokenLines[tokenIndex]}"
121 |
122 | if tagged.tag().dn() is "_"
123 | return new typeClasses.Discard
124 |
125 | if tagActions[tagged.tag().dn()]?
126 | return tagActions[tagged.tag().dn()].action tagged.obj()
127 |
128 | return tagged
129 | else
130 | return handledToken
131 |
132 | token1 = tokens.shift()
133 | if token1 is undefined
134 | return undefined
135 | else
136 | result = read_ahead token1
137 | if result instanceof typeClasses.Discard
138 | return ""
139 | return result
140 |
141 | parse = (string) -> read lex string
142 |
143 | module.exports =
144 | Char: Char
145 | char: char
146 | Iterable: Iterable
147 | Symbol: Symbol
148 | sym: sym
149 | Keyword: Keyword
150 | kw: kw
151 | BigInt: BigInt
152 | bigInt: bigInt
153 | List: List
154 | Vector: Vector
155 | Pair: Pair
156 | Map: Map
157 | Set: Set
158 | Tag: Tag
159 | Tagged: Tagged
160 |
161 | setTypeClass: (typeName, klass) ->
162 | if typeClasses[typeName]?
163 | module.exports[typeName] = klass
164 | typeClasses[typeName] = klass
165 |
166 | setTagAction: (tag, action) -> tagActions[tag.dn()] = tag: tag, action: action
167 | setTokenHandler: (handler, pattern, action) -> tokenHandlers[handler] = {pattern, action}
168 | setTokenPattern: (handler, pattern) -> tokenHandlers[handler].pattern = pattern
169 | setTokenAction: (handler, action) -> tokenHandlers[handler].action = action
170 | setEncodeHandler: (handler, test, action) -> encodeHandlers[handler] = {test, action}
171 | setEncodeTest: (type, test) -> encodeHandlers[type].test = test
172 | setEncodeAction: (type, action) -> encodeHandlers[type].action = action
173 | parse: parse
174 | encode: encode
175 | encodeJson: encodeJson
176 | toJS: (obj) -> if obj?.jsEncode? then obj.jsEncode() else obj
177 | atPath: require "./atPath"
178 | unify: require("./unify")(parse)
179 | compile: require "./compile"
180 |
181 | if typeof window is "undefined"
182 | fs = require "fs"
183 | module.exports.readFile = (file, cb) ->
184 | fs.readFile file, "utf-8", (err, data) ->
185 | if err then throw err
186 | cb parse data
187 |
188 | module.exports.readFileSync = (file) ->
189 | parse fs.readFileSync file, "utf-8"
190 |
--------------------------------------------------------------------------------
/src/tags.coffee:
--------------------------------------------------------------------------------
1 | {Prim} = require "./atoms"
2 | type = require "./type"
3 |
4 | class Tag
5 | constructor: (@namespace, @name...) ->
6 | if arguments.length is 1
7 | [@namespace, @name...] = arguments[0].split('/')
8 |
9 | ns: -> @namespace
10 | dn: -> [@namespace].concat(@name).join('/')
11 |
12 | class Tagged extends Prim
13 | constructor: (@_tag, @_obj) ->
14 |
15 | jsEncode: ->
16 | tag: @tag().dn(), value: @obj().jsEncode()
17 |
18 | ednEncode: ->
19 | "\##{@tag().dn()} #{require("./encode").encode @obj()}"
20 |
21 | jsonEncode: ->
22 | Tagged: [@tag().dn(), if @obj().jsonEncode? then @obj().jsonEncode() else @obj()]
23 |
24 | tag: -> @_tag
25 | obj: -> @_obj
26 |
27 | walk: (iter) ->
28 | new Tagged @_tag, if type(@_obj.walk) is "function" then @_obj.walk iter else iter @_obj
29 |
30 | tagActions =
31 | uuid: tag: (new Tag "uuid"), action: (obj) -> obj
32 | inst: tag: (new Tag "inst"), action: (obj) -> new Date Date.parse obj
33 |
34 | module.exports = {Tag, Tagged, tagActions}
35 |
--------------------------------------------------------------------------------
/src/tokens.coffee:
--------------------------------------------------------------------------------
1 | {Char, StringObj, char, kw, sym, bigInt} = require "./atoms"
2 | {Tag} = require "./tags"
3 |
4 | handleToken = (token) ->
5 | if token instanceof StringObj
6 | return token.toString()
7 |
8 | for name, handler of tokenHandlers
9 | if handler.pattern.test token
10 | return handler.action token
11 |
12 | sym token
13 |
14 | tokenHandlers =
15 | nil: pattern: /^nil$/, action: (token) -> null
16 | boolean: pattern: /^true$|^false$/, action: (token) -> token is "true"
17 | keyword: pattern: /^[\:].*$/, action: (token) -> kw token
18 | char: pattern: /^\\.*$/, action: (token) -> char token[1..-1]
19 | integer: pattern: /^[\-\+]?[0-9]+N?$/, action: (token) ->
20 | #allows for numbers larger than js can handle
21 | #we purposely "box" it so that an error will occur
22 | #if someone attempts to treat it as a normal number
23 | if /\d{15,}/.test token then return bigInt token
24 |
25 | parseInt if token is "-0" then "0" else token
26 | float: pattern: /^[\-\+]?[0-9]+(\.[0-9]*)?([eE][-+]?[0-9]+)?M?$/, action: (token) -> parseFloat token
27 | tagged: pattern: /^#.*$/, action: (token) -> new Tag token[1..-1]
28 |
29 | module.exports = {handleToken, tokenHandlers}
30 |
--------------------------------------------------------------------------------
/src/type.coffee:
--------------------------------------------------------------------------------
1 | module.exports = if typeof module isnt "undefined" and this.module isnt module
2 | require "type-component"
3 | else
4 | require "type"
5 |
--------------------------------------------------------------------------------
/src/unify.coffee:
--------------------------------------------------------------------------------
1 | type = require "./type"
2 | {Map, Pair} = require "./collections"
3 | {Symbol, kw, sym} = require "./atoms"
4 |
5 | module.exports = (parse) -> (data, values, tokenStart = "?") ->
6 | if type(data) is "string" then data = parse data
7 | if type(values) is "string" then values = parse values
8 |
9 | valExists = (v) ->
10 | if values instanceof Map
11 | if values.exists v then values.at v
12 | else if values.exists sym(v) then values.at sym(v)
13 | else if values.exists kw(":#{v}") then values.at kw(":#{v}")
14 | else
15 | values[v]
16 |
17 | unifyToken = (t) ->
18 | if t instanceof Symbol and "#{t}"[0] is tokenStart and (val = valExists "#{t}"[1..-1])? then return val else t
19 |
20 | data.walk (v, k) ->
21 | if k? then new Pair(unifyToken(k), unifyToken(v)) else unifyToken v
--------------------------------------------------------------------------------
/test/all-edn-tests.coffee:
--------------------------------------------------------------------------------
1 | {assert, logTotals} = require "./assertion"
2 | fs = require "fs"
3 | equals = require "equals"
4 | edn = require "../src/reader"
5 |
6 | testDir = "./test/edn-tests/valid-edn"
7 | jsDir = "./test/edn-tests/platforms/js"
8 |
9 | files = fs.readdirSync "./test/edn-tests/valid-edn"
10 | files.forEach (file) ->
11 | validEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
12 | expectedJs = fs.readFileSync "#{jsDir}/#{file.replace(/\..+$/, '.js')}", "utf-8"
13 | expected = eval "(function(){return #{expectedJs}})()"
14 | parsedToJs = edn.toJS edn.parse validEdn
15 | assert file, parsedToJs, expected
16 |
17 | logTotals()
18 |
--------------------------------------------------------------------------------
/test/all-invalid-edn-tests.coffee:
--------------------------------------------------------------------------------
1 | {assertNotParse, assertSkip, logTotals} = require "./assertion"
2 | fs = require "fs"
3 | equals = require "equals"
4 | edn = require "../src/reader"
5 |
6 | testDir = "./test/edn-tests/invalid-edn"
7 |
8 | skipTests = [
9 | "brace-mismatch-nested-2.edn",
10 | "curly-unopened.edn",
11 | "hash-keyword.edn"
12 | ]
13 |
14 | files = fs.readdirSync testDir
15 | files.forEach (file) ->
16 | if skipTests.indexOf(file) == -1
17 | invalidEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
18 | assertNotParse file, invalidEdn
19 | else
20 | assertSkip file
21 |
22 | logTotals()
23 |
--------------------------------------------------------------------------------
/test/assertion.coffee:
--------------------------------------------------------------------------------
1 | edn = require "../src/reader"
2 | us = require "underscore"
3 |
4 | passed = 0
5 | failed = 0
6 | skipped = 0
7 |
8 | isVal = (val) -> (comp) -> us.isEqual comp, val
9 |
10 | isNotVal = (val) -> (comp) -> not us.isEqual comp, val
11 |
12 | assert = (desc, result, pred) ->
13 | if not us.isFunction pred
14 | pred = isVal pred
15 |
16 | if pred result
17 | passed++
18 | console.log "[OK]", desc
19 | else
20 | failed++
21 | console.log "[FAIL]", desc
22 | console.log "we got:", if result.jsEncode? then result.jsEncode() else result
23 |
24 | assertParse = (desc, str, pred) ->
25 | try
26 | result = edn.parse str
27 | catch e
28 | result = e
29 |
30 | assert desc, result, pred
31 |
32 | assertNotParse = (desc, str) ->
33 | try
34 | edn.parse str
35 | result = false
36 | catch e
37 | result = true
38 |
39 | assert desc, str, -> result
40 |
41 | assertEncode = (desc, obj, pred) ->
42 | assert desc, (edn.encode obj), pred
43 |
44 | assertSkip = (desc) ->
45 | skipped++
46 | console.log "[SKIP]", desc
47 |
48 | totalString = ->
49 | "PASSED: #{passed}/#{passed + failed}" +
50 | (if skipped then ", SKIPPED: #{skipped}" else "")
51 |
52 | logTotals = ->
53 | console.log totalString(), "\n"
54 | if failed > 0
55 | process.exit 1
56 |
57 | module.exports = {isVal, isNotVal, assert, assertParse, assertNotParse, assertEncode, assertSkip, logTotals}
--------------------------------------------------------------------------------
/test/perf.coffee:
--------------------------------------------------------------------------------
1 | edn = require "../src/reader"
2 | fs = require "fs"
3 | micro = require "microtime"
4 |
5 | testJson = (data) ->
6 | now = micro.now()
7 | JSON.parse data
8 | end = micro.now()
9 | console.log "JSON: #{end - now}"
10 |
11 | testEdn = (data) ->
12 | now = micro.now()
13 | edn.parse data
14 | end = micro.now()
15 | console.log "EDN: #{end - now}"
16 |
17 | edn.readFileSync("./test/performance-json/items.edn").each (file) ->
18 | console.log "COMPARE #{file}"
19 | testJson fs.readFileSync "./test/performance-json/#{file}.json", "utf-8"
20 | testEdn fs.readFileSync "./test/edn-tests/performance/#{file}.edn", "utf-8"
21 |
22 |
--------------------------------------------------------------------------------
/test/performance-json/items.edn:
--------------------------------------------------------------------------------
1 | [vector-of-strings
2 | vector-of-uuid
3 | vector-of-instants
4 | map-of-maps
5 | vector-of-maps
6 | vector-of-bigints
7 | large-keyword-map
8 | large-symbol-map
9 | vector-of-longs
10 | set-of-longs
11 | vector-of-doubles
12 | vector-of-bigdecs
13 | map-tree
14 | mixed-vector
15 | set-of-keywords
16 | vector-of-keywords
17 | set-of-symbols
18 | vector-of-symbols
19 | vector-tree
20 | vector-of-ints
21 | vector-of-vectors
22 | vector-of-booleans
23 | list-of-nil
24 | vector-of-nil
25 | vector-of-chars]
26 |
--------------------------------------------------------------------------------
/test/performance-json/list-of-nil.json:
--------------------------------------------------------------------------------
1 | [
2 | null,
3 | null,
4 | null,
5 | null,
6 | null,
7 | null,
8 | null,
9 | null,
10 | null,
11 | null,
12 | null,
13 | null,
14 | null,
15 | null,
16 | null,
17 | null,
18 | null,
19 | null,
20 | null,
21 | null,
22 | null,
23 | null,
24 | null,
25 | null,
26 | null,
27 | null,
28 | null,
29 | null,
30 | null,
31 | null,
32 | null,
33 | null,
34 | null,
35 | null,
36 | null,
37 | null,
38 | null,
39 | null,
40 | null,
41 | null,
42 | null,
43 | null,
44 | null,
45 | null,
46 | null,
47 | null,
48 | null,
49 | null,
50 | null,
51 | null,
52 | null,
53 | null,
54 | null,
55 | null,
56 | null,
57 | null,
58 | null,
59 | null,
60 | null,
61 | null,
62 | null,
63 | null,
64 | null,
65 | null,
66 | null,
67 | null,
68 | null,
69 | null,
70 | null,
71 | null,
72 | null,
73 | null,
74 | null,
75 | null,
76 | null,
77 | null,
78 | null,
79 | null,
80 | null,
81 | null,
82 | null,
83 | null,
84 | null,
85 | null,
86 | null,
87 | null,
88 | null,
89 | null,
90 | null,
91 | null,
92 | null,
93 | null,
94 | null,
95 | null,
96 | null,
97 | null,
98 | null,
99 | null,
100 | null,
101 | null,
102 | null,
103 | null,
104 | null,
105 | null,
106 | null,
107 | null,
108 | null,
109 | null,
110 | null,
111 | null,
112 | null,
113 | null,
114 | null,
115 | null,
116 | null,
117 | null,
118 | null,
119 | null,
120 | null,
121 | null,
122 | null,
123 | null,
124 | null,
125 | null,
126 | null,
127 | null,
128 | null,
129 | null,
130 | null,
131 | null,
132 | null,
133 | null,
134 | null,
135 | null,
136 | null,
137 | null,
138 | null,
139 | null,
140 | null,
141 | null,
142 | null,
143 | null,
144 | null,
145 | null,
146 | null,
147 | null,
148 | null,
149 | null,
150 | null,
151 | null,
152 | null,
153 | null,
154 | null,
155 | null,
156 | null,
157 | null,
158 | null,
159 | null,
160 | null,
161 | null,
162 | null,
163 | null,
164 | null,
165 | null,
166 | null,
167 | null,
168 | null,
169 | null,
170 | null,
171 | null,
172 | null,
173 | null,
174 | null,
175 | null,
176 | null,
177 | null,
178 | null,
179 | null,
180 | null,
181 | null,
182 | null,
183 | null,
184 | null,
185 | null,
186 | null,
187 | null,
188 | null,
189 | null,
190 | null,
191 | null,
192 | null,
193 | null,
194 | null,
195 | null,
196 | null,
197 | null,
198 | null,
199 | null,
200 | null,
201 | null,
202 | null,
203 | null,
204 | null,
205 | null,
206 | null,
207 | null,
208 | null,
209 | null,
210 | null,
211 | null,
212 | null,
213 | null,
214 | null,
215 | null,
216 | null,
217 | null,
218 | null,
219 | null,
220 | null,
221 | null,
222 | null,
223 | null,
224 | null,
225 | null,
226 | null,
227 | null,
228 | null,
229 | null,
230 | null,
231 | null,
232 | null,
233 | null,
234 | null,
235 | null,
236 | null,
237 | null,
238 | null,
239 | null,
240 | null,
241 | null,
242 | null,
243 | null,
244 | null,
245 | null,
246 | null,
247 | null,
248 | null,
249 | null,
250 | null,
251 | null,
252 | null,
253 | null,
254 | null,
255 | null,
256 | null,
257 | null,
258 | null,
259 | null,
260 | null,
261 | null,
262 | null,
263 | null,
264 | null,
265 | null,
266 | null,
267 | null,
268 | null,
269 | null,
270 | null,
271 | null,
272 | null,
273 | null,
274 | null,
275 | null,
276 | null,
277 | null,
278 | null,
279 | null,
280 | null,
281 | null,
282 | null,
283 | null,
284 | null,
285 | null,
286 | null,
287 | null,
288 | null,
289 | null,
290 | null,
291 | null,
292 | null,
293 | null,
294 | null,
295 | null,
296 | null,
297 | null,
298 | null,
299 | null,
300 | null,
301 | null,
302 | null,
303 | null,
304 | null,
305 | null,
306 | null,
307 | null,
308 | null,
309 | null,
310 | null,
311 | null,
312 | null,
313 | null,
314 | null,
315 | null,
316 | null,
317 | null,
318 | null,
319 | null,
320 | null,
321 | null,
322 | null,
323 | null,
324 | null,
325 | null,
326 | null,
327 | null,
328 | null,
329 | null,
330 | null,
331 | null,
332 | null,
333 | null,
334 | null,
335 | null,
336 | null,
337 | null,
338 | null,
339 | null,
340 | null,
341 | null,
342 | null,
343 | null,
344 | null,
345 | null,
346 | null,
347 | null,
348 | null,
349 | null,
350 | null,
351 | null,
352 | null,
353 | null,
354 | null,
355 | null,
356 | null,
357 | null,
358 | null,
359 | null,
360 | null,
361 | null,
362 | null,
363 | null,
364 | null,
365 | null,
366 | null,
367 | null,
368 | null,
369 | null,
370 | null,
371 | null,
372 | null,
373 | null,
374 | null,
375 | null,
376 | null,
377 | null,
378 | null,
379 | null,
380 | null,
381 | null,
382 | null,
383 | null,
384 | null,
385 | null,
386 | null,
387 | null,
388 | null,
389 | null,
390 | null,
391 | null,
392 | null,
393 | null,
394 | null,
395 | null,
396 | null,
397 | null,
398 | null,
399 | null,
400 | null,
401 | null,
402 | null,
403 | null,
404 | null,
405 | null,
406 | null,
407 | null,
408 | null,
409 | null,
410 | null,
411 | null,
412 | null,
413 | null,
414 | null,
415 | null,
416 | null,
417 | null,
418 | null,
419 | null,
420 | null,
421 | null,
422 | null,
423 | null,
424 | null,
425 | null,
426 | null,
427 | null,
428 | null,
429 | null,
430 | null,
431 | null,
432 | null,
433 | null,
434 | null,
435 | null,
436 | null,
437 | null,
438 | null,
439 | null,
440 | null,
441 | null,
442 | null,
443 | null,
444 | null,
445 | null,
446 | null,
447 | null,
448 | null,
449 | null,
450 | null,
451 | null,
452 | null,
453 | null,
454 | null,
455 | null,
456 | null,
457 | null,
458 | null,
459 | null,
460 | null,
461 | null,
462 | null,
463 | null,
464 | null,
465 | null,
466 | null,
467 | null,
468 | null,
469 | null,
470 | null,
471 | null,
472 | null,
473 | null,
474 | null,
475 | null,
476 | null,
477 | null,
478 | null,
479 | null,
480 | null,
481 | null,
482 | null,
483 | null,
484 | null,
485 | null,
486 | null,
487 | null,
488 | null,
489 | null,
490 | null,
491 | null,
492 | null,
493 | null,
494 | null,
495 | null,
496 | null,
497 | null,
498 | null,
499 | null,
500 | null,
501 | null,
502 | null,
503 | null,
504 | null,
505 | null,
506 | null,
507 | null,
508 | null,
509 | null,
510 | null,
511 | null,
512 | null,
513 | null,
514 | null,
515 | null,
516 | null,
517 | null,
518 | null,
519 | null,
520 | null,
521 | null,
522 | null,
523 | null,
524 | null,
525 | null,
526 | null,
527 | null,
528 | null,
529 | null,
530 | null,
531 | null,
532 | null,
533 | null,
534 | null,
535 | null,
536 | null,
537 | null,
538 | null,
539 | null,
540 | null,
541 | null,
542 | null,
543 | null,
544 | null,
545 | null,
546 | null,
547 | null,
548 | null,
549 | null,
550 | null,
551 | null,
552 | null,
553 | null,
554 | null,
555 | null,
556 | null,
557 | null,
558 | null,
559 | null,
560 | null,
561 | null,
562 | null,
563 | null,
564 | null,
565 | null,
566 | null,
567 | null,
568 | null,
569 | null,
570 | null,
571 | null,
572 | null,
573 | null,
574 | null,
575 | null,
576 | null,
577 | null,
578 | null,
579 | null,
580 | null,
581 | null,
582 | null,
583 | null,
584 | null,
585 | null,
586 | null,
587 | null,
588 | null,
589 | null,
590 | null,
591 | null,
592 | null,
593 | null,
594 | null,
595 | null,
596 | null,
597 | null,
598 | null,
599 | null,
600 | null,
601 | null,
602 | null,
603 | null,
604 | null,
605 | null,
606 | null,
607 | null,
608 | null,
609 | null,
610 | null,
611 | null,
612 | null,
613 | null,
614 | null,
615 | null,
616 | null,
617 | null,
618 | null,
619 | null,
620 | null,
621 | null,
622 | null,
623 | null,
624 | null,
625 | null,
626 | null,
627 | null,
628 | null,
629 | null,
630 | null,
631 | null,
632 | null,
633 | null,
634 | null,
635 | null,
636 | null,
637 | null,
638 | null,
639 | null,
640 | null,
641 | null,
642 | null,
643 | null,
644 | null,
645 | null,
646 | null,
647 | null,
648 | null,
649 | null,
650 | null,
651 | null,
652 | null,
653 | null,
654 | null,
655 | null,
656 | null,
657 | null,
658 | null,
659 | null,
660 | null,
661 | null,
662 | null,
663 | null,
664 | null,
665 | null,
666 | null,
667 | null,
668 | null,
669 | null,
670 | null,
671 | null,
672 | null,
673 | null,
674 | null,
675 | null,
676 | null,
677 | null,
678 | null,
679 | null,
680 | null,
681 | null,
682 | null,
683 | null,
684 | null,
685 | null,
686 | null,
687 | null,
688 | null,
689 | null,
690 | null,
691 | null,
692 | null,
693 | null,
694 | null,
695 | null,
696 | null,
697 | null,
698 | null,
699 | null,
700 | null,
701 | null,
702 | null,
703 | null,
704 | null,
705 | null,
706 | null,
707 | null,
708 | null,
709 | null,
710 | null,
711 | null,
712 | null,
713 | null,
714 | null,
715 | null,
716 | null,
717 | null,
718 | null,
719 | null,
720 | null,
721 | null,
722 | null,
723 | null,
724 | null,
725 | null,
726 | null,
727 | null,
728 | null,
729 | null,
730 | null,
731 | null,
732 | null,
733 | null,
734 | null,
735 | null,
736 | null,
737 | null,
738 | null,
739 | null,
740 | null,
741 | null,
742 | null,
743 | null,
744 | null,
745 | null,
746 | null,
747 | null,
748 | null,
749 | null,
750 | null,
751 | null,
752 | null,
753 | null,
754 | null,
755 | null,
756 | null,
757 | null,
758 | null,
759 | null,
760 | null,
761 | null,
762 | null,
763 | null,
764 | null,
765 | null,
766 | null,
767 | null,
768 | null,
769 | null,
770 | null,
771 | null,
772 | null,
773 | null,
774 | null,
775 | null,
776 | null,
777 | null,
778 | null,
779 | null,
780 | null,
781 | null,
782 | null,
783 | null,
784 | null,
785 | null,
786 | null,
787 | null,
788 | null,
789 | null,
790 | null,
791 | null,
792 | null,
793 | null,
794 | null,
795 | null,
796 | null,
797 | null,
798 | null,
799 | null,
800 | null,
801 | null,
802 | null,
803 | null,
804 | null,
805 | null,
806 | null,
807 | null,
808 | null,
809 | null,
810 | null,
811 | null,
812 | null,
813 | null,
814 | null,
815 | null,
816 | null,
817 | null,
818 | null,
819 | null,
820 | null,
821 | null,
822 | null,
823 | null,
824 | null,
825 | null,
826 | null,
827 | null,
828 | null,
829 | null,
830 | null,
831 | null,
832 | null,
833 | null,
834 | null,
835 | null,
836 | null,
837 | null,
838 | null,
839 | null,
840 | null,
841 | null,
842 | null,
843 | null,
844 | null,
845 | null,
846 | null,
847 | null,
848 | null,
849 | null,
850 | null,
851 | null,
852 | null,
853 | null,
854 | null,
855 | null,
856 | null,
857 | null,
858 | null,
859 | null,
860 | null,
861 | null,
862 | null,
863 | null,
864 | null,
865 | null,
866 | null,
867 | null,
868 | null,
869 | null,
870 | null,
871 | null,
872 | null,
873 | null,
874 | null,
875 | null,
876 | null,
877 | null,
878 | null,
879 | null,
880 | null,
881 | null,
882 | null,
883 | null,
884 | null,
885 | null,
886 | null,
887 | null,
888 | null,
889 | null,
890 | null,
891 | null,
892 | null,
893 | null,
894 | null,
895 | null,
896 | null,
897 | null,
898 | null,
899 | null,
900 | null,
901 | null,
902 | null,
903 | null,
904 | null,
905 | null,
906 | null,
907 | null,
908 | null,
909 | null,
910 | null,
911 | null,
912 | null,
913 | null,
914 | null,
915 | null,
916 | null,
917 | null,
918 | null,
919 | null,
920 | null,
921 | null,
922 | null,
923 | null,
924 | null,
925 | null,
926 | null,
927 | null,
928 | null,
929 | null,
930 | null,
931 | null,
932 | null,
933 | null,
934 | null,
935 | null,
936 | null,
937 | null,
938 | null,
939 | null,
940 | null,
941 | null,
942 | null,
943 | null,
944 | null,
945 | null,
946 | null,
947 | null,
948 | null,
949 | null,
950 | null,
951 | null,
952 | null,
953 | null,
954 | null,
955 | null,
956 | null,
957 | null,
958 | null,
959 | null,
960 | null,
961 | null,
962 | null,
963 | null,
964 | null,
965 | null,
966 | null,
967 | null,
968 | null,
969 | null,
970 | null,
971 | null,
972 | null,
973 | null,
974 | null,
975 | null,
976 | null,
977 | null,
978 | null,
979 | null,
980 | null,
981 | null,
982 | null,
983 | null,
984 | null,
985 | null,
986 | null,
987 | null,
988 | null,
989 | null,
990 | null,
991 | null,
992 | null,
993 | null,
994 | null,
995 | null,
996 | null,
997 | null,
998 | null,
999 | null,
1000 | null,
1001 | null,
1002 | null,
1003 | null,
1004 | null,
1005 | null,
1006 | null,
1007 | null,
1008 | null,
1009 | null,
1010 | null,
1011 | null,
1012 | null,
1013 | null,
1014 | null,
1015 | null,
1016 | null,
1017 | null,
1018 | null,
1019 | null,
1020 | null,
1021 | null,
1022 | null,
1023 | null,
1024 | null,
1025 | null,
1026 | null,
1027 | null,
1028 | null,
1029 | null,
1030 | null,
1031 | null,
1032 | null,
1033 | null,
1034 | null,
1035 | null,
1036 | null,
1037 | null,
1038 | null,
1039 | null,
1040 | null,
1041 | null,
1042 | null,
1043 | null,
1044 | null,
1045 | null,
1046 | null,
1047 | null,
1048 | null,
1049 | null,
1050 | null,
1051 | null,
1052 | null,
1053 | null,
1054 | null,
1055 | null,
1056 | null,
1057 | null,
1058 | null,
1059 | null,
1060 | null,
1061 | null,
1062 | null,
1063 | null,
1064 | null,
1065 | null,
1066 | null,
1067 | null,
1068 | null,
1069 | null,
1070 | null,
1071 | null,
1072 | null,
1073 | null,
1074 | null,
1075 | null,
1076 | null,
1077 | null,
1078 | null,
1079 | null,
1080 | null,
1081 | null,
1082 | null,
1083 | null,
1084 | null,
1085 | null,
1086 | null,
1087 | null,
1088 | null,
1089 | null,
1090 | null,
1091 | null,
1092 | null,
1093 | null,
1094 | null,
1095 | null,
1096 | null,
1097 | null,
1098 | null,
1099 | null,
1100 | null,
1101 | null,
1102 | null,
1103 | null,
1104 | null,
1105 | null,
1106 | null,
1107 | null,
1108 | null,
1109 | null,
1110 | null,
1111 | null,
1112 | null,
1113 | null,
1114 | null,
1115 | null,
1116 | null,
1117 | null,
1118 | null,
1119 | null,
1120 | null,
1121 | null,
1122 | null,
1123 | null,
1124 | null,
1125 | null,
1126 | null,
1127 | null,
1128 | null,
1129 | null,
1130 | null,
1131 | null,
1132 | null,
1133 | null,
1134 | null,
1135 | null,
1136 | null,
1137 | null,
1138 | null,
1139 | null,
1140 | null,
1141 | null,
1142 | null,
1143 | null,
1144 | null,
1145 | null,
1146 | null,
1147 | null,
1148 | null,
1149 | null,
1150 | null,
1151 | null,
1152 | null,
1153 | null,
1154 | null,
1155 | null,
1156 | null,
1157 | null,
1158 | null,
1159 | null,
1160 | null,
1161 | null,
1162 | null,
1163 | null,
1164 | null,
1165 | null,
1166 | null,
1167 | null,
1168 | null,
1169 | null,
1170 | null,
1171 | null,
1172 | null,
1173 | null,
1174 | null,
1175 | null,
1176 | null,
1177 | null,
1178 | null,
1179 | null,
1180 | null,
1181 | null,
1182 | null,
1183 | null,
1184 | null,
1185 | null,
1186 | null,
1187 | null,
1188 | null,
1189 | null,
1190 | null,
1191 | null,
1192 | null,
1193 | null,
1194 | null,
1195 | null,
1196 | null,
1197 | null,
1198 | null,
1199 | null,
1200 | null,
1201 | null,
1202 | null,
1203 | null,
1204 | null,
1205 | null,
1206 | null,
1207 | null,
1208 | null,
1209 | null,
1210 | null,
1211 | null,
1212 | null,
1213 | null,
1214 | null,
1215 | null,
1216 | null,
1217 | null,
1218 | null,
1219 | null,
1220 | null,
1221 | null,
1222 | null,
1223 | null,
1224 | null,
1225 | null,
1226 | null,
1227 | null,
1228 | null,
1229 | null,
1230 | null,
1231 | null,
1232 | null,
1233 | null,
1234 | null,
1235 | null,
1236 | null,
1237 | null,
1238 | null,
1239 | null,
1240 | null,
1241 | null,
1242 | null,
1243 | null,
1244 | null,
1245 | null,
1246 | null,
1247 | null,
1248 | null,
1249 | null,
1250 | null,
1251 | null,
1252 | null,
1253 | null,
1254 | null,
1255 | null,
1256 | null,
1257 | null,
1258 | null,
1259 | null,
1260 | null,
1261 | null,
1262 | null,
1263 | null,
1264 | null,
1265 | null,
1266 | null,
1267 | null,
1268 | null,
1269 | null,
1270 | null,
1271 | null,
1272 | null,
1273 | null,
1274 | null,
1275 | null,
1276 | null,
1277 | null,
1278 | null,
1279 | null,
1280 | null,
1281 | null,
1282 | null,
1283 | null,
1284 | null,
1285 | null,
1286 | null,
1287 | null,
1288 | null,
1289 | null,
1290 | null,
1291 | null,
1292 | null,
1293 | null,
1294 | null,
1295 | null,
1296 | null,
1297 | null,
1298 | null,
1299 | null,
1300 | null,
1301 | null,
1302 | null,
1303 | null,
1304 | null,
1305 | null,
1306 | null,
1307 | null,
1308 | null,
1309 | null,
1310 | null,
1311 | null,
1312 | null,
1313 | null,
1314 | null,
1315 | null,
1316 | null,
1317 | null,
1318 | null,
1319 | null,
1320 | null,
1321 | null,
1322 | null,
1323 | null,
1324 | null,
1325 | null,
1326 | null,
1327 | null,
1328 | null,
1329 | null,
1330 | null,
1331 | null,
1332 | null,
1333 | null,
1334 | null,
1335 | null,
1336 | null,
1337 | null,
1338 | null,
1339 | null,
1340 | null,
1341 | null,
1342 | null,
1343 | null,
1344 | null,
1345 | null,
1346 | null,
1347 | null,
1348 | null,
1349 | null,
1350 | null,
1351 | null,
1352 | null,
1353 | null,
1354 | null,
1355 | null,
1356 | null,
1357 | null,
1358 | null,
1359 | null,
1360 | null,
1361 | null,
1362 | null,
1363 | null,
1364 | null,
1365 | null,
1366 | null,
1367 | null,
1368 | null,
1369 | null,
1370 | null,
1371 | null,
1372 | null,
1373 | null,
1374 | null,
1375 | null,
1376 | null,
1377 | null,
1378 | null,
1379 | null,
1380 | null,
1381 | null,
1382 | null,
1383 | null,
1384 | null,
1385 | null,
1386 | null,
1387 | null,
1388 | null,
1389 | null,
1390 | null,
1391 | null,
1392 | null,
1393 | null,
1394 | null,
1395 | null,
1396 | null,
1397 | null,
1398 | null,
1399 | null,
1400 | null,
1401 | null,
1402 | null,
1403 | null,
1404 | null,
1405 | null,
1406 | null,
1407 | null,
1408 | null,
1409 | null,
1410 | null,
1411 | null,
1412 | null,
1413 | null,
1414 | null,
1415 | null,
1416 | null,
1417 | null,
1418 | null,
1419 | null,
1420 | null,
1421 | null,
1422 | null,
1423 | null,
1424 | null,
1425 | null,
1426 | null,
1427 | null,
1428 | null,
1429 | null,
1430 | null,
1431 | null,
1432 | null,
1433 | null,
1434 | null,
1435 | null,
1436 | null,
1437 | null,
1438 | null,
1439 | null,
1440 | null,
1441 | null,
1442 | null,
1443 | null,
1444 | null,
1445 | null,
1446 | null,
1447 | null,
1448 | null,
1449 | null,
1450 | null,
1451 | null,
1452 | null,
1453 | null,
1454 | null,
1455 | null,
1456 | null,
1457 | null,
1458 | null,
1459 | null,
1460 | null,
1461 | null,
1462 | null,
1463 | null,
1464 | null,
1465 | null,
1466 | null,
1467 | null,
1468 | null,
1469 | null,
1470 | null,
1471 | null,
1472 | null,
1473 | null,
1474 | null,
1475 | null,
1476 | null,
1477 | null,
1478 | null,
1479 | null,
1480 | null,
1481 | null,
1482 | null,
1483 | null,
1484 | null,
1485 | null,
1486 | null,
1487 | null,
1488 | null,
1489 | null,
1490 | null,
1491 | null,
1492 | null,
1493 | null,
1494 | null,
1495 | null,
1496 | null,
1497 | null,
1498 | null,
1499 | null,
1500 | null,
1501 | null,
1502 | null,
1503 | null,
1504 | null,
1505 | null,
1506 | null,
1507 | null,
1508 | null,
1509 | null,
1510 | null,
1511 | null,
1512 | null,
1513 | null,
1514 | null,
1515 | null,
1516 | null,
1517 | null,
1518 | null,
1519 | null,
1520 | null,
1521 | null,
1522 | null,
1523 | null,
1524 | null,
1525 | null,
1526 | null,
1527 | null,
1528 | null,
1529 | null,
1530 | null,
1531 | null,
1532 | null,
1533 | null,
1534 | null,
1535 | null,
1536 | null,
1537 | null,
1538 | null,
1539 | null,
1540 | null,
1541 | null,
1542 | null,
1543 | null,
1544 | null,
1545 | null,
1546 | null,
1547 | null,
1548 | null,
1549 | null,
1550 | null,
1551 | null,
1552 | null,
1553 | null,
1554 | null,
1555 | null,
1556 | null,
1557 | null,
1558 | null,
1559 | null,
1560 | null,
1561 | null,
1562 | null,
1563 | null,
1564 | null,
1565 | null,
1566 | null,
1567 | null,
1568 | null,
1569 | null,
1570 | null,
1571 | null,
1572 | null,
1573 | null,
1574 | null,
1575 | null,
1576 | null,
1577 | null,
1578 | null,
1579 | null,
1580 | null,
1581 | null,
1582 | null,
1583 | null,
1584 | null,
1585 | null,
1586 | null,
1587 | null,
1588 | null,
1589 | null,
1590 | null,
1591 | null,
1592 | null,
1593 | null,
1594 | null,
1595 | null,
1596 | null,
1597 | null,
1598 | null,
1599 | null,
1600 | null,
1601 | null,
1602 | null,
1603 | null,
1604 | null,
1605 | null,
1606 | null,
1607 | null,
1608 | null,
1609 | null,
1610 | null,
1611 | null,
1612 | null,
1613 | null,
1614 | null,
1615 | null,
1616 | null,
1617 | null,
1618 | null,
1619 | null,
1620 | null,
1621 | null,
1622 | null,
1623 | null,
1624 | null,
1625 | null,
1626 | null,
1627 | null,
1628 | null,
1629 | null,
1630 | null,
1631 | null,
1632 | null,
1633 | null,
1634 | null,
1635 | null,
1636 | null,
1637 | null,
1638 | null,
1639 | null,
1640 | null,
1641 | null,
1642 | null,
1643 | null,
1644 | null,
1645 | null,
1646 | null,
1647 | null,
1648 | null,
1649 | null,
1650 | null,
1651 | null,
1652 | null,
1653 | null,
1654 | null,
1655 | null,
1656 | null,
1657 | null,
1658 | null,
1659 | null,
1660 | null,
1661 | null,
1662 | null,
1663 | null,
1664 | null,
1665 | null,
1666 | null,
1667 | null,
1668 | null,
1669 | null,
1670 | null,
1671 | null,
1672 | null,
1673 | null,
1674 | null,
1675 | null,
1676 | null,
1677 | null,
1678 | null,
1679 | null,
1680 | null,
1681 | null,
1682 | null,
1683 | null,
1684 | null,
1685 | null,
1686 | null,
1687 | null,
1688 | null,
1689 | null,
1690 | null,
1691 | null,
1692 | null,
1693 | null,
1694 | null,
1695 | null,
1696 | null,
1697 | null,
1698 | null,
1699 | null,
1700 | null,
1701 | null,
1702 | null,
1703 | null,
1704 | null,
1705 | null,
1706 | null,
1707 | null,
1708 | null,
1709 | null,
1710 | null,
1711 | null,
1712 | null,
1713 | null,
1714 | null,
1715 | null,
1716 | null,
1717 | null,
1718 | null,
1719 | null,
1720 | null,
1721 | null,
1722 | null,
1723 | null,
1724 | null,
1725 | null,
1726 | null,
1727 | null,
1728 | null,
1729 | null,
1730 | null,
1731 | null,
1732 | null,
1733 | null,
1734 | null,
1735 | null,
1736 | null,
1737 | null,
1738 | null,
1739 | null,
1740 | null,
1741 | null,
1742 | null,
1743 | null,
1744 | null,
1745 | null,
1746 | null,
1747 | null,
1748 | null,
1749 | null,
1750 | null,
1751 | null,
1752 | null,
1753 | null,
1754 | null,
1755 | null,
1756 | null,
1757 | null,
1758 | null,
1759 | null,
1760 | null,
1761 | null,
1762 | null,
1763 | null,
1764 | null,
1765 | null,
1766 | null,
1767 | null,
1768 | null,
1769 | null,
1770 | null,
1771 | null,
1772 | null,
1773 | null,
1774 | null,
1775 | null,
1776 | null,
1777 | null,
1778 | null,
1779 | null,
1780 | null,
1781 | null,
1782 | null,
1783 | null,
1784 | null,
1785 | null,
1786 | null,
1787 | null,
1788 | null,
1789 | null,
1790 | null,
1791 | null,
1792 | null,
1793 | null,
1794 | null,
1795 | null,
1796 | null,
1797 | null,
1798 | null,
1799 | null,
1800 | null,
1801 | null,
1802 | null,
1803 | null,
1804 | null,
1805 | null,
1806 | null,
1807 | null,
1808 | null,
1809 | null,
1810 | null,
1811 | null,
1812 | null,
1813 | null,
1814 | null,
1815 | null,
1816 | null,
1817 | null,
1818 | null,
1819 | null,
1820 | null,
1821 | null,
1822 | null,
1823 | null,
1824 | null,
1825 | null,
1826 | null,
1827 | null,
1828 | null,
1829 | null,
1830 | null,
1831 | null,
1832 | null,
1833 | null,
1834 | null,
1835 | null,
1836 | null,
1837 | null,
1838 | null,
1839 | null,
1840 | null,
1841 | null,
1842 | null,
1843 | null,
1844 | null,
1845 | null,
1846 | null,
1847 | null,
1848 | null,
1849 | null,
1850 | null,
1851 | null,
1852 | null,
1853 | null,
1854 | null,
1855 | null,
1856 | null,
1857 | null,
1858 | null,
1859 | null,
1860 | null,
1861 | null,
1862 | null,
1863 | null,
1864 | null,
1865 | null,
1866 | null,
1867 | null,
1868 | null,
1869 | null,
1870 | null,
1871 | null,
1872 | null,
1873 | null,
1874 | null,
1875 | null,
1876 | null,
1877 | null,
1878 | null,
1879 | null,
1880 | null,
1881 | null,
1882 | null,
1883 | null,
1884 | null,
1885 | null,
1886 | null,
1887 | null,
1888 | null,
1889 | null,
1890 | null,
1891 | null,
1892 | null,
1893 | null,
1894 | null,
1895 | null,
1896 | null,
1897 | null,
1898 | null,
1899 | null,
1900 | null,
1901 | null,
1902 | null,
1903 | null,
1904 | null,
1905 | null,
1906 | null,
1907 | null,
1908 | null,
1909 | null,
1910 | null,
1911 | null,
1912 | null,
1913 | null,
1914 | null,
1915 | null,
1916 | null,
1917 | null,
1918 | null,
1919 | null,
1920 | null,
1921 | null,
1922 | null,
1923 | null,
1924 | null,
1925 | null,
1926 | null,
1927 | null,
1928 | null,
1929 | null,
1930 | null,
1931 | null,
1932 | null,
1933 | null,
1934 | null,
1935 | null,
1936 | null,
1937 | null,
1938 | null,
1939 | null,
1940 | null,
1941 | null,
1942 | null,
1943 | null,
1944 | null,
1945 | null,
1946 | null,
1947 | null,
1948 | null,
1949 | null,
1950 | null,
1951 | null,
1952 | null,
1953 | null,
1954 | null,
1955 | null,
1956 | null,
1957 | null,
1958 | null,
1959 | null,
1960 | null,
1961 | null,
1962 | null,
1963 | null,
1964 | null,
1965 | null,
1966 | null,
1967 | null,
1968 | null,
1969 | null,
1970 | null,
1971 | null,
1972 | null,
1973 | null,
1974 | null,
1975 | null,
1976 | null,
1977 | null,
1978 | null,
1979 | null,
1980 | null,
1981 | null,
1982 | null,
1983 | null,
1984 | null,
1985 | null,
1986 | null,
1987 | null,
1988 | null,
1989 | null,
1990 | null,
1991 | null,
1992 | null,
1993 | null,
1994 | null,
1995 | null,
1996 | null,
1997 | null,
1998 | null,
1999 | null,
2000 | null,
2001 | null,
2002 | null,
2003 | null,
2004 | null,
2005 | null,
2006 | null,
2007 | null,
2008 | null,
2009 | null,
2010 | null,
2011 | null,
2012 | null,
2013 | null,
2014 | null,
2015 | null,
2016 | null,
2017 | null,
2018 | null,
2019 | null,
2020 | null,
2021 | null,
2022 | null,
2023 | null,
2024 | null,
2025 | null,
2026 | null,
2027 | null,
2028 | null,
2029 | null,
2030 | null,
2031 | null,
2032 | null,
2033 | null,
2034 | null,
2035 | null,
2036 | null,
2037 | null,
2038 | null,
2039 | null,
2040 | null,
2041 | null,
2042 | null,
2043 | null,
2044 | null,
2045 | null,
2046 | null,
2047 | null,
2048 | null,
2049 | null
2050 | ]
2051 |
--------------------------------------------------------------------------------
/test/performance-json/vector-of-booleans.json:
--------------------------------------------------------------------------------
1 | [
2 | false,
3 | true,
4 | false,
5 | false,
6 | true,
7 | false,
8 | false,
9 | false,
10 | false,
11 | false,
12 | true,
13 | false,
14 | false,
15 | true,
16 | false,
17 | false,
18 | true,
19 | true,
20 | true,
21 | false,
22 | false,
23 | true,
24 | true,
25 | false,
26 | true,
27 | true,
28 | false,
29 | false,
30 | true,
31 | true,
32 | true,
33 | false,
34 | true,
35 | true,
36 | true,
37 | true,
38 | true,
39 | true,
40 | false,
41 | true,
42 | false,
43 | false,
44 | true,
45 | true,
46 | true,
47 | true,
48 | true,
49 | false,
50 | false,
51 | false,
52 | true,
53 | true,
54 | false,
55 | false,
56 | false,
57 | true,
58 | false,
59 | false,
60 | false,
61 | false,
62 | true,
63 | true,
64 | true,
65 | true,
66 | false,
67 | true,
68 | true,
69 | false,
70 | false,
71 | true,
72 | false,
73 | true,
74 | false,
75 | true,
76 | true,
77 | true,
78 | false,
79 | false,
80 | true,
81 | true,
82 | true,
83 | false,
84 | false,
85 | true,
86 | false,
87 | true,
88 | false,
89 | false,
90 | true,
91 | false,
92 | false,
93 | false,
94 | false,
95 | false,
96 | true,
97 | false,
98 | true,
99 | false,
100 | true,
101 | true,
102 | false,
103 | true,
104 | true,
105 | true,
106 | true,
107 | true,
108 | true,
109 | true,
110 | false,
111 | false,
112 | true,
113 | false,
114 | true,
115 | true,
116 | false,
117 | true,
118 | true,
119 | true,
120 | true,
121 | false,
122 | false,
123 | false,
124 | false,
125 | true,
126 | true,
127 | true,
128 | true,
129 | false,
130 | true,
131 | true,
132 | true,
133 | false,
134 | true,
135 | false,
136 | true,
137 | true,
138 | true,
139 | true,
140 | true,
141 | true,
142 | true,
143 | true,
144 | false,
145 | true,
146 | false,
147 | false,
148 | false,
149 | true,
150 | true,
151 | false,
152 | true,
153 | true,
154 | false,
155 | true,
156 | true,
157 | false,
158 | true,
159 | false,
160 | false,
161 | true,
162 | false,
163 | true,
164 | false,
165 | true,
166 | false,
167 | true,
168 | false,
169 | true,
170 | false,
171 | true,
172 | false,
173 | false,
174 | false,
175 | true,
176 | true,
177 | false,
178 | false,
179 | true,
180 | false,
181 | false,
182 | true,
183 | true,
184 | false,
185 | false,
186 | true,
187 | false,
188 | true,
189 | false,
190 | true,
191 | false,
192 | true,
193 | false,
194 | false,
195 | true,
196 | true,
197 | false,
198 | true,
199 | true,
200 | false,
201 | true,
202 | true,
203 | false,
204 | true,
205 | false,
206 | true,
207 | true,
208 | false,
209 | true,
210 | true,
211 | true,
212 | false,
213 | false,
214 | false,
215 | true,
216 | true,
217 | true,
218 | false,
219 | false,
220 | true,
221 | true,
222 | true,
223 | false,
224 | true,
225 | true,
226 | false,
227 | true,
228 | false,
229 | true,
230 | true,
231 | false,
232 | true,
233 | false,
234 | true,
235 | false,
236 | false,
237 | false,
238 | false,
239 | true,
240 | false,
241 | false,
242 | true,
243 | false,
244 | false,
245 | false,
246 | false,
247 | true,
248 | true,
249 | true,
250 | false,
251 | true,
252 | true,
253 | false,
254 | false,
255 | true,
256 | false,
257 | false,
258 | true,
259 | true,
260 | false,
261 | false,
262 | false,
263 | true,
264 | false,
265 | false,
266 | true,
267 | true,
268 | false,
269 | false,
270 | true,
271 | true,
272 | false,
273 | false,
274 | true,
275 | true,
276 | false,
277 | false,
278 | false,
279 | true,
280 | false,
281 | true,
282 | true,
283 | true,
284 | false,
285 | true,
286 | true,
287 | true,
288 | false,
289 | true,
290 | false,
291 | true,
292 | true,
293 | false,
294 | false,
295 | true,
296 | false,
297 | true,
298 | true,
299 | false,
300 | true,
301 | false,
302 | true,
303 | false,
304 | false,
305 | false,
306 | true,
307 | false,
308 | false,
309 | true,
310 | true,
311 | true,
312 | false,
313 | true,
314 | false,
315 | false,
316 | false,
317 | false,
318 | false,
319 | false,
320 | false,
321 | false,
322 | true,
323 | false,
324 | true,
325 | false,
326 | false,
327 | true,
328 | false,
329 | false,
330 | true,
331 | false,
332 | true,
333 | true,
334 | false,
335 | false,
336 | true,
337 | true,
338 | false,
339 | false,
340 | false,
341 | true,
342 | true,
343 | true,
344 | true,
345 | true,
346 | true,
347 | false,
348 | true,
349 | true,
350 | true,
351 | true,
352 | false,
353 | true,
354 | false,
355 | true,
356 | true,
357 | true,
358 | false,
359 | true,
360 | true,
361 | true,
362 | false,
363 | true,
364 | false,
365 | true,
366 | false,
367 | true,
368 | false,
369 | false,
370 | true,
371 | true,
372 | false,
373 | true,
374 | true,
375 | false,
376 | false,
377 | false,
378 | false,
379 | false,
380 | true,
381 | false,
382 | false,
383 | false,
384 | false,
385 | false,
386 | true,
387 | true,
388 | false,
389 | true,
390 | false,
391 | true,
392 | false,
393 | true,
394 | false,
395 | true,
396 | false,
397 | false,
398 | true,
399 | false,
400 | false,
401 | true,
402 | false,
403 | true,
404 | true,
405 | true,
406 | false,
407 | true,
408 | false,
409 | true,
410 | true,
411 | false,
412 | true,
413 | false,
414 | true,
415 | true,
416 | true,
417 | true,
418 | false,
419 | false,
420 | false,
421 | true,
422 | false,
423 | true,
424 | true,
425 | false,
426 | false,
427 | false,
428 | true,
429 | true,
430 | true,
431 | false,
432 | true,
433 | true,
434 | false,
435 | false,
436 | true,
437 | true,
438 | true,
439 | true,
440 | true,
441 | true,
442 | false,
443 | true,
444 | true,
445 | true,
446 | true,
447 | false,
448 | true,
449 | true,
450 | false,
451 | false,
452 | true,
453 | true,
454 | true,
455 | true,
456 | false,
457 | true,
458 | false,
459 | false,
460 | true,
461 | true,
462 | false,
463 | true,
464 | false,
465 | true,
466 | true,
467 | true,
468 | false,
469 | true,
470 | false,
471 | false,
472 | true,
473 | true,
474 | false,
475 | false,
476 | true,
477 | true,
478 | true,
479 | true,
480 | false,
481 | true,
482 | false,
483 | true,
484 | true,
485 | true,
486 | false,
487 | false,
488 | false,
489 | true,
490 | false,
491 | false,
492 | true,
493 | true,
494 | false,
495 | true,
496 | true,
497 | false,
498 | true,
499 | false,
500 | false,
501 | false,
502 | false,
503 | false,
504 | false,
505 | false,
506 | true,
507 | false,
508 | false,
509 | false,
510 | true,
511 | false,
512 | true,
513 | false,
514 | false,
515 | false,
516 | true,
517 | false,
518 | true,
519 | false,
520 | true,
521 | false,
522 | true,
523 | true,
524 | true,
525 | false,
526 | false,
527 | true,
528 | true,
529 | false,
530 | true,
531 | true,
532 | false,
533 | false,
534 | true,
535 | true,
536 | false,
537 | false,
538 | true,
539 | true,
540 | false,
541 | false,
542 | true,
543 | false,
544 | true,
545 | false,
546 | false,
547 | true,
548 | true,
549 | false,
550 | true,
551 | false,
552 | true,
553 | false,
554 | false,
555 | true,
556 | false,
557 | false,
558 | false,
559 | false,
560 | false,
561 | false,
562 | true,
563 | false,
564 | false,
565 | false,
566 | true,
567 | true,
568 | false,
569 | false,
570 | true,
571 | false,
572 | false,
573 | true,
574 | true,
575 | false,
576 | true,
577 | true,
578 | true,
579 | true,
580 | false,
581 | false,
582 | false,
583 | false,
584 | true,
585 | false,
586 | true,
587 | false,
588 | true,
589 | true,
590 | false,
591 | true,
592 | false,
593 | false,
594 | true,
595 | true,
596 | true,
597 | true,
598 | true,
599 | true,
600 | false,
601 | false,
602 | false,
603 | false,
604 | false,
605 | true,
606 | false,
607 | true,
608 | false,
609 | true,
610 | false,
611 | true,
612 | true,
613 | false,
614 | false,
615 | true,
616 | true,
617 | false,
618 | false,
619 | false,
620 | true,
621 | false,
622 | true,
623 | true,
624 | true,
625 | true,
626 | false,
627 | false,
628 | true,
629 | true,
630 | false,
631 | false,
632 | true,
633 | true,
634 | true,
635 | true,
636 | true,
637 | true,
638 | false,
639 | true,
640 | true,
641 | true,
642 | false,
643 | false,
644 | false,
645 | true,
646 | true,
647 | false,
648 | true,
649 | true,
650 | true,
651 | false,
652 | true,
653 | false,
654 | false,
655 | true,
656 | true,
657 | false,
658 | true,
659 | false,
660 | true,
661 | false,
662 | true,
663 | true,
664 | true,
665 | true,
666 | true,
667 | true,
668 | true,
669 | true,
670 | false,
671 | false,
672 | false,
673 | true,
674 | false,
675 | false,
676 | false,
677 | true,
678 | false,
679 | false,
680 | false,
681 | false,
682 | false,
683 | false,
684 | true,
685 | false,
686 | true,
687 | true,
688 | true,
689 | false,
690 | true,
691 | true,
692 | true,
693 | true,
694 | false,
695 | false,
696 | false,
697 | true,
698 | true,
699 | false,
700 | false,
701 | false,
702 | true,
703 | true,
704 | false,
705 | true,
706 | false,
707 | true,
708 | true,
709 | true,
710 | false,
711 | true,
712 | true,
713 | false,
714 | true,
715 | false,
716 | true,
717 | false,
718 | false,
719 | false,
720 | false,
721 | false,
722 | true,
723 | true,
724 | true,
725 | true,
726 | true,
727 | true,
728 | false,
729 | false,
730 | true,
731 | true,
732 | false,
733 | true,
734 | false,
735 | true,
736 | true,
737 | true,
738 | true,
739 | false,
740 | true,
741 | false,
742 | true,
743 | false,
744 | false,
745 | true,
746 | true,
747 | false,
748 | true,
749 | false,
750 | true,
751 | true,
752 | false,
753 | true,
754 | false,
755 | true,
756 | false,
757 | false,
758 | false,
759 | false,
760 | true,
761 | true,
762 | false,
763 | true,
764 | false,
765 | true,
766 | false,
767 | true,
768 | true,
769 | true,
770 | true,
771 | true,
772 | false,
773 | false,
774 | false,
775 | true,
776 | false,
777 | false,
778 | false,
779 | true,
780 | false,
781 | true,
782 | true,
783 | true,
784 | false,
785 | true,
786 | false,
787 | false,
788 | false,
789 | true,
790 | true,
791 | false,
792 | true,
793 | false,
794 | false,
795 | false,
796 | true,
797 | false,
798 | false,
799 | true,
800 | true,
801 | true,
802 | false,
803 | false,
804 | false,
805 | true,
806 | true,
807 | false,
808 | true,
809 | false,
810 | true,
811 | true,
812 | false,
813 | true,
814 | true,
815 | false,
816 | true,
817 | true,
818 | false,
819 | false,
820 | true,
821 | false,
822 | true,
823 | false,
824 | false,
825 | false,
826 | false,
827 | true,
828 | true,
829 | false,
830 | false,
831 | true,
832 | true,
833 | false,
834 | false,
835 | false,
836 | true,
837 | true,
838 | false,
839 | true,
840 | true,
841 | true,
842 | true,
843 | true,
844 | true,
845 | true,
846 | true,
847 | false,
848 | false,
849 | true,
850 | false,
851 | true,
852 | false,
853 | true,
854 | false,
855 | false,
856 | false,
857 | false,
858 | true,
859 | true,
860 | true,
861 | false,
862 | false,
863 | false,
864 | false,
865 | true,
866 | false,
867 | false,
868 | true,
869 | true,
870 | true,
871 | false,
872 | false,
873 | false,
874 | true,
875 | true,
876 | false,
877 | true,
878 | true,
879 | false,
880 | false,
881 | false,
882 | true,
883 | true,
884 | false,
885 | true,
886 | true,
887 | false,
888 | true,
889 | true,
890 | true,
891 | true,
892 | true,
893 | false,
894 | false,
895 | false,
896 | true,
897 | false,
898 | false,
899 | true,
900 | true,
901 | false,
902 | true,
903 | false,
904 | false,
905 | false,
906 | true,
907 | false,
908 | false,
909 | false,
910 | true,
911 | false,
912 | false,
913 | false,
914 | true,
915 | true,
916 | true,
917 | false,
918 | true,
919 | false,
920 | true,
921 | false,
922 | false,
923 | true,
924 | true,
925 | true,
926 | true,
927 | true,
928 | false,
929 | false,
930 | true,
931 | false,
932 | false,
933 | true,
934 | false,
935 | false,
936 | false,
937 | true,
938 | false,
939 | false,
940 | false,
941 | false,
942 | true,
943 | true,
944 | true,
945 | false,
946 | true,
947 | false,
948 | true,
949 | false,
950 | true,
951 | false,
952 | false,
953 | true,
954 | true,
955 | true,
956 | true,
957 | false,
958 | false,
959 | false,
960 | true,
961 | true,
962 | true,
963 | true,
964 | true,
965 | true,
966 | false,
967 | false,
968 | false,
969 | false,
970 | true,
971 | true,
972 | true,
973 | true,
974 | false,
975 | false,
976 | true,
977 | false,
978 | true,
979 | false,
980 | true,
981 | false,
982 | false,
983 | false,
984 | true,
985 | false,
986 | true,
987 | true,
988 | false,
989 | true,
990 | false,
991 | true,
992 | false,
993 | true,
994 | false,
995 | false,
996 | true,
997 | false,
998 | false,
999 | false,
1000 | false,
1001 | false,
1002 | false,
1003 | true,
1004 | false,
1005 | true,
1006 | true,
1007 | true,
1008 | false,
1009 | true,
1010 | false,
1011 | false,
1012 | false,
1013 | true,
1014 | true,
1015 | false,
1016 | false,
1017 | true,
1018 | false,
1019 | true,
1020 | true,
1021 | true,
1022 | false,
1023 | false,
1024 | false,
1025 | true,
1026 | false,
1027 | true,
1028 | false,
1029 | false,
1030 | true,
1031 | false,
1032 | false,
1033 | true,
1034 | true,
1035 | true,
1036 | true,
1037 | true,
1038 | true,
1039 | false,
1040 | false,
1041 | false,
1042 | true,
1043 | false,
1044 | false,
1045 | false,
1046 | false,
1047 | true,
1048 | true,
1049 | false,
1050 | true,
1051 | false,
1052 | true,
1053 | false,
1054 | false,
1055 | false,
1056 | true,
1057 | false,
1058 | true,
1059 | false,
1060 | true,
1061 | true,
1062 | true,
1063 | true,
1064 | true,
1065 | false,
1066 | false,
1067 | true,
1068 | false,
1069 | true,
1070 | false,
1071 | false,
1072 | true,
1073 | true,
1074 | true,
1075 | true,
1076 | false,
1077 | false,
1078 | false,
1079 | true,
1080 | false,
1081 | false,
1082 | true,
1083 | true,
1084 | true,
1085 | true,
1086 | true,
1087 | false,
1088 | false,
1089 | false,
1090 | true,
1091 | true,
1092 | true,
1093 | false,
1094 | false,
1095 | false,
1096 | false,
1097 | false,
1098 | false,
1099 | true,
1100 | false,
1101 | true,
1102 | false,
1103 | true,
1104 | true,
1105 | true,
1106 | false,
1107 | false,
1108 | false,
1109 | true,
1110 | true,
1111 | true,
1112 | false,
1113 | false,
1114 | false,
1115 | false,
1116 | true,
1117 | false,
1118 | false,
1119 | false,
1120 | true,
1121 | true,
1122 | true,
1123 | false,
1124 | false,
1125 | false,
1126 | false,
1127 | true,
1128 | false,
1129 | true,
1130 | false,
1131 | false,
1132 | true,
1133 | true,
1134 | true,
1135 | true,
1136 | true,
1137 | false,
1138 | false,
1139 | true,
1140 | false,
1141 | false,
1142 | true,
1143 | true,
1144 | true,
1145 | true,
1146 | false,
1147 | true,
1148 | false,
1149 | false,
1150 | true,
1151 | false,
1152 | true,
1153 | false,
1154 | false,
1155 | true,
1156 | true,
1157 | true,
1158 | false,
1159 | true,
1160 | true,
1161 | false,
1162 | true,
1163 | false,
1164 | false,
1165 | true,
1166 | false,
1167 | false,
1168 | true,
1169 | false,
1170 | false,
1171 | false,
1172 | false,
1173 | false,
1174 | false,
1175 | false,
1176 | true,
1177 | true,
1178 | false,
1179 | false,
1180 | false,
1181 | true,
1182 | false,
1183 | false,
1184 | true,
1185 | true,
1186 | false,
1187 | false,
1188 | true,
1189 | true,
1190 | true,
1191 | true,
1192 | true,
1193 | true,
1194 | true,
1195 | false,
1196 | false,
1197 | false,
1198 | true,
1199 | true,
1200 | true,
1201 | true,
1202 | false,
1203 | false,
1204 | false,
1205 | false,
1206 | false,
1207 | false,
1208 | false,
1209 | false,
1210 | false,
1211 | true,
1212 | false,
1213 | true,
1214 | true,
1215 | true,
1216 | true,
1217 | false,
1218 | false,
1219 | false,
1220 | true,
1221 | true,
1222 | false,
1223 | false,
1224 | false,
1225 | true,
1226 | false,
1227 | false,
1228 | true,
1229 | true,
1230 | true,
1231 | true,
1232 | true,
1233 | false,
1234 | false,
1235 | true,
1236 | false,
1237 | true,
1238 | true,
1239 | false,
1240 | true,
1241 | true,
1242 | false,
1243 | true,
1244 | true,
1245 | false,
1246 | false,
1247 | true,
1248 | false,
1249 | false,
1250 | true,
1251 | true,
1252 | false,
1253 | false,
1254 | false,
1255 | true,
1256 | true,
1257 | true,
1258 | false,
1259 | false,
1260 | true,
1261 | false,
1262 | true,
1263 | false,
1264 | true,
1265 | false,
1266 | true,
1267 | true,
1268 | true,
1269 | false,
1270 | true,
1271 | false,
1272 | false,
1273 | false,
1274 | false,
1275 | false,
1276 | true,
1277 | false,
1278 | false,
1279 | false,
1280 | true,
1281 | true,
1282 | false,
1283 | false,
1284 | false,
1285 | false,
1286 | false,
1287 | false,
1288 | true,
1289 | false,
1290 | true,
1291 | true,
1292 | true,
1293 | true,
1294 | true,
1295 | false,
1296 | true,
1297 | true,
1298 | false,
1299 | false,
1300 | false,
1301 | false,
1302 | true,
1303 | false,
1304 | false,
1305 | false,
1306 | true,
1307 | true,
1308 | true,
1309 | true,
1310 | false,
1311 | true,
1312 | true,
1313 | false,
1314 | true,
1315 | false,
1316 | false,
1317 | true,
1318 | false,
1319 | true,
1320 | true,
1321 | false,
1322 | true,
1323 | false,
1324 | false,
1325 | true,
1326 | false,
1327 | true,
1328 | false,
1329 | false,
1330 | false,
1331 | false,
1332 | false,
1333 | false,
1334 | false,
1335 | true,
1336 | true,
1337 | false,
1338 | false,
1339 | false,
1340 | false,
1341 | true,
1342 | false,
1343 | true,
1344 | true,
1345 | true,
1346 | false,
1347 | false,
1348 | false,
1349 | true,
1350 | true,
1351 | false,
1352 | false,
1353 | false,
1354 | false,
1355 | true,
1356 | true,
1357 | true,
1358 | false,
1359 | false,
1360 | true,
1361 | false,
1362 | false,
1363 | false,
1364 | true,
1365 | false,
1366 | false,
1367 | true,
1368 | false,
1369 | true,
1370 | true,
1371 | true,
1372 | false,
1373 | false,
1374 | false,
1375 | false,
1376 | true,
1377 | false,
1378 | false,
1379 | true,
1380 | false,
1381 | true,
1382 | false,
1383 | true,
1384 | false,
1385 | false,
1386 | false,
1387 | false,
1388 | false,
1389 | false,
1390 | false,
1391 | false,
1392 | true,
1393 | true,
1394 | false,
1395 | true,
1396 | true,
1397 | false,
1398 | false,
1399 | false,
1400 | false,
1401 | true,
1402 | true,
1403 | false,
1404 | true,
1405 | true,
1406 | true,
1407 | false,
1408 | true,
1409 | false,
1410 | true,
1411 | true,
1412 | false,
1413 | false,
1414 | true,
1415 | true,
1416 | true,
1417 | true,
1418 | false,
1419 | true,
1420 | false,
1421 | true,
1422 | false,
1423 | true,
1424 | true,
1425 | true,
1426 | false,
1427 | false,
1428 | false,
1429 | true,
1430 | false,
1431 | false,
1432 | false,
1433 | true,
1434 | false,
1435 | true,
1436 | true,
1437 | false,
1438 | true,
1439 | true,
1440 | true,
1441 | true,
1442 | false,
1443 | true,
1444 | false,
1445 | true,
1446 | false,
1447 | true,
1448 | false,
1449 | false,
1450 | false,
1451 | false,
1452 | true,
1453 | false,
1454 | false,
1455 | true,
1456 | false,
1457 | true,
1458 | false,
1459 | false,
1460 | true,
1461 | false,
1462 | false,
1463 | true,
1464 | false,
1465 | true,
1466 | false,
1467 | false,
1468 | false,
1469 | false,
1470 | true,
1471 | true,
1472 | false,
1473 | false,
1474 | false,
1475 | false,
1476 | true,
1477 | false,
1478 | true,
1479 | false,
1480 | false,
1481 | false,
1482 | true,
1483 | true,
1484 | false,
1485 | true,
1486 | false,
1487 | true,
1488 | false,
1489 | true,
1490 | false,
1491 | true,
1492 | true,
1493 | false,
1494 | true,
1495 | true,
1496 | false,
1497 | false,
1498 | true,
1499 | true,
1500 | false,
1501 | false,
1502 | true,
1503 | false,
1504 | false,
1505 | true,
1506 | true,
1507 | true,
1508 | false,
1509 | true,
1510 | true,
1511 | false,
1512 | true,
1513 | false,
1514 | false,
1515 | true,
1516 | false,
1517 | true,
1518 | true,
1519 | false,
1520 | true,
1521 | true,
1522 | true,
1523 | false,
1524 | true,
1525 | false,
1526 | true,
1527 | false,
1528 | false,
1529 | false,
1530 | false,
1531 | false,
1532 | true,
1533 | false,
1534 | false,
1535 | false,
1536 | false,
1537 | true,
1538 | true,
1539 | true,
1540 | true,
1541 | false,
1542 | false,
1543 | true,
1544 | true,
1545 | true,
1546 | true,
1547 | false,
1548 | true,
1549 | false,
1550 | true,
1551 | true,
1552 | true,
1553 | false,
1554 | true,
1555 | true,
1556 | false,
1557 | false,
1558 | false,
1559 | false,
1560 | false,
1561 | false,
1562 | false,
1563 | false,
1564 | false,
1565 | false,
1566 | false,
1567 | true,
1568 | true,
1569 | false,
1570 | true,
1571 | false,
1572 | false,
1573 | false,
1574 | true,
1575 | false,
1576 | true,
1577 | false,
1578 | true,
1579 | false,
1580 | false,
1581 | false,
1582 | true,
1583 | true,
1584 | false,
1585 | true,
1586 | true,
1587 | true,
1588 | false,
1589 | true,
1590 | true,
1591 | false,
1592 | false,
1593 | false,
1594 | false,
1595 | false,
1596 | false,
1597 | false,
1598 | false,
1599 | false,
1600 | false,
1601 | false,
1602 | true,
1603 | true,
1604 | true,
1605 | false,
1606 | true,
1607 | false,
1608 | false,
1609 | true,
1610 | true,
1611 | false,
1612 | false,
1613 | false,
1614 | false,
1615 | true,
1616 | false,
1617 | false,
1618 | true,
1619 | false,
1620 | false,
1621 | true,
1622 | true,
1623 | true,
1624 | false,
1625 | false,
1626 | true,
1627 | true,
1628 | true,
1629 | true,
1630 | false,
1631 | true,
1632 | true,
1633 | false,
1634 | true,
1635 | true,
1636 | true,
1637 | true,
1638 | false,
1639 | true,
1640 | false,
1641 | true,
1642 | true,
1643 | true,
1644 | false,
1645 | false,
1646 | false,
1647 | true,
1648 | true,
1649 | false,
1650 | false,
1651 | false,
1652 | false,
1653 | false,
1654 | true,
1655 | true,
1656 | true,
1657 | true,
1658 | true,
1659 | false,
1660 | true,
1661 | false,
1662 | true,
1663 | true,
1664 | true,
1665 | true,
1666 | false,
1667 | false,
1668 | true,
1669 | true,
1670 | true,
1671 | true,
1672 | true,
1673 | true,
1674 | true,
1675 | true,
1676 | false,
1677 | true,
1678 | true,
1679 | false,
1680 | false,
1681 | true,
1682 | true,
1683 | true,
1684 | true,
1685 | false,
1686 | false,
1687 | true,
1688 | true,
1689 | true,
1690 | true,
1691 | false,
1692 | false,
1693 | true,
1694 | false,
1695 | true,
1696 | true,
1697 | true,
1698 | false,
1699 | true,
1700 | true,
1701 | false,
1702 | false,
1703 | true,
1704 | true,
1705 | true,
1706 | false,
1707 | false,
1708 | false,
1709 | true,
1710 | false,
1711 | false,
1712 | false,
1713 | false,
1714 | false,
1715 | false,
1716 | false,
1717 | true,
1718 | false,
1719 | true,
1720 | true,
1721 | false,
1722 | true,
1723 | false,
1724 | true,
1725 | false,
1726 | true,
1727 | false,
1728 | true,
1729 | false,
1730 | false,
1731 | false,
1732 | false,
1733 | true,
1734 | false,
1735 | false,
1736 | true,
1737 | true,
1738 | true,
1739 | true,
1740 | false,
1741 | true,
1742 | true,
1743 | true,
1744 | false,
1745 | true,
1746 | true,
1747 | true,
1748 | true,
1749 | true,
1750 | true,
1751 | true,
1752 | false,
1753 | true,
1754 | false,
1755 | false,
1756 | false,
1757 | false,
1758 | true,
1759 | false,
1760 | true,
1761 | true,
1762 | true,
1763 | false,
1764 | false,
1765 | true,
1766 | false,
1767 | false,
1768 | false,
1769 | true,
1770 | true,
1771 | true,
1772 | false,
1773 | false,
1774 | true,
1775 | true,
1776 | false,
1777 | false,
1778 | false,
1779 | false,
1780 | false,
1781 | false,
1782 | true,
1783 | true,
1784 | false,
1785 | true,
1786 | true,
1787 | false,
1788 | true,
1789 | true,
1790 | false,
1791 | false,
1792 | false,
1793 | true,
1794 | false,
1795 | false,
1796 | true,
1797 | false,
1798 | false,
1799 | false,
1800 | true,
1801 | true,
1802 | false,
1803 | false,
1804 | false,
1805 | true,
1806 | false,
1807 | true,
1808 | true,
1809 | true,
1810 | true,
1811 | true,
1812 | false,
1813 | false,
1814 | false,
1815 | false,
1816 | false,
1817 | false,
1818 | true,
1819 | true,
1820 | false,
1821 | true,
1822 | true,
1823 | true,
1824 | false,
1825 | false,
1826 | true,
1827 | false,
1828 | true,
1829 | false,
1830 | true,
1831 | false,
1832 | false,
1833 | true,
1834 | false,
1835 | false,
1836 | true,
1837 | true,
1838 | true,
1839 | true,
1840 | false,
1841 | false,
1842 | true,
1843 | true,
1844 | true,
1845 | false,
1846 | true,
1847 | true,
1848 | true,
1849 | false,
1850 | false,
1851 | true,
1852 | false,
1853 | true,
1854 | true,
1855 | false,
1856 | true,
1857 | false,
1858 | true,
1859 | false,
1860 | false,
1861 | false,
1862 | true,
1863 | true,
1864 | false,
1865 | true,
1866 | true,
1867 | false,
1868 | true,
1869 | false,
1870 | true,
1871 | true,
1872 | true,
1873 | true,
1874 | false,
1875 | false,
1876 | false,
1877 | false,
1878 | true,
1879 | true,
1880 | true,
1881 | false,
1882 | false,
1883 | false,
1884 | true,
1885 | false,
1886 | true,
1887 | false,
1888 | true,
1889 | true,
1890 | true,
1891 | false,
1892 | false,
1893 | false,
1894 | false,
1895 | false,
1896 | false,
1897 | true,
1898 | true,
1899 | false,
1900 | false,
1901 | false,
1902 | true,
1903 | true,
1904 | true,
1905 | false,
1906 | true,
1907 | false,
1908 | true,
1909 | true,
1910 | true,
1911 | true,
1912 | false,
1913 | false,
1914 | false,
1915 | false,
1916 | false,
1917 | false,
1918 | true,
1919 | true,
1920 | true,
1921 | true,
1922 | true,
1923 | true,
1924 | true,
1925 | false,
1926 | false,
1927 | false,
1928 | true,
1929 | true,
1930 | false,
1931 | false,
1932 | true,
1933 | true,
1934 | false,
1935 | false,
1936 | false,
1937 | false,
1938 | true,
1939 | true,
1940 | true,
1941 | false,
1942 | false,
1943 | false,
1944 | true,
1945 | false,
1946 | true,
1947 | false,
1948 | true,
1949 | true,
1950 | true,
1951 | false,
1952 | true,
1953 | false,
1954 | true,
1955 | false,
1956 | true,
1957 | true,
1958 | false,
1959 | true,
1960 | true,
1961 | true,
1962 | true,
1963 | false,
1964 | false,
1965 | false,
1966 | true,
1967 | false,
1968 | true,
1969 | false,
1970 | true,
1971 | false,
1972 | false,
1973 | false,
1974 | false,
1975 | false,
1976 | false,
1977 | false,
1978 | false,
1979 | false,
1980 | true,
1981 | false,
1982 | false,
1983 | false,
1984 | true,
1985 | true,
1986 | true,
1987 | true,
1988 | true,
1989 | false,
1990 | true,
1991 | true,
1992 | true,
1993 | true,
1994 | true,
1995 | true,
1996 | true,
1997 | true,
1998 | false,
1999 | false,
2000 | false,
2001 | true,
2002 | true,
2003 | true,
2004 | true,
2005 | false,
2006 | false,
2007 | false,
2008 | false,
2009 | true,
2010 | true,
2011 | false,
2012 | true,
2013 | false,
2014 | true,
2015 | true,
2016 | false,
2017 | true,
2018 | false,
2019 | true,
2020 | false,
2021 | false,
2022 | true,
2023 | true,
2024 | false,
2025 | false,
2026 | true,
2027 | true,
2028 | true,
2029 | true,
2030 | true,
2031 | false,
2032 | false,
2033 | true,
2034 | true,
2035 | true,
2036 | true,
2037 | true,
2038 | false,
2039 | true,
2040 | true,
2041 | true,
2042 | false,
2043 | true,
2044 | true,
2045 | true,
2046 | false,
2047 | false,
2048 | true,
2049 | false
2050 | ]
2051 |
--------------------------------------------------------------------------------
/test/performance-json/vector-of-chars.json:
--------------------------------------------------------------------------------
1 | [
2 | "i",
3 | "!",
4 | "$",
5 | "\f",
6 | "Q",
7 | "g",
8 | "N",
9 | "Y",
10 | "S",
11 | "L",
12 | "m",
13 | "Y",
14 | "T",
15 | "0",
16 | "j",
17 | ";",
18 | "6",
19 | "A",
20 | "z",
21 | "&",
22 | "k",
23 | "^",
24 | "=",
25 | "v",
26 | "k",
27 | "@",
28 | "U",
29 | "W",
30 | "x",
31 | "X",
32 | "l",
33 | "Y",
34 | "5",
35 | "\t",
36 | "4",
37 | "t",
38 | "n",
39 | ":",
40 | "C",
41 | "2",
42 | "Q",
43 | "i",
44 | "$",
45 | "j",
46 | "q",
47 | "|",
48 | ")",
49 | "$",
50 | "f",
51 | "\f",
52 | "s",
53 | "A",
54 | "\"",
55 | "J",
56 | "F",
57 | "f",
58 | "D",
59 | "0",
60 | "M",
61 | "G",
62 | "\"",
63 | "r",
64 | "'",
65 | "K",
66 | "A",
67 | "[",
68 | ">",
69 | "n",
70 | "i",
71 | "'",
72 | "d",
73 | "!",
74 | "s",
75 | "]",
76 | "j",
77 | "=",
78 | "\"",
79 | "M",
80 | "J",
81 | "z",
82 | "L",
83 | "\f",
84 | "2",
85 | "F",
86 | "f",
87 | "m",
88 | "/",
89 | "D",
90 | "'",
91 | "r",
92 | "N",
93 | "b",
94 | "{",
95 | "Y",
96 | "F",
97 | "_",
98 | "g",
99 | "3",
100 | "b",
101 | ">",
102 | "x",
103 | "|",
104 | "%",
105 | "F",
106 | "<",
107 | "D",
108 | "N",
109 | "Y",
110 | "^",
111 | "&",
112 | "J",
113 | "Y",
114 | "(",
115 | "i",
116 | ",",
117 | "j",
118 | "/",
119 | "R",
120 | "_",
121 | "B",
122 | "\r",
123 | "h",
124 | "^",
125 | "N",
126 | "A",
127 | "D",
128 | "q",
129 | "=",
130 | "L",
131 | "v",
132 | "(",
133 | "8",
134 | "P",
135 | "K",
136 | "v",
137 | "Y",
138 | "(",
139 | "u",
140 | "T",
141 | "<",
142 | "6",
143 | "<",
144 | "z",
145 | ".",
146 | "-",
147 | "T",
148 | "o",
149 | "V",
150 | "\n",
151 | "$",
152 | "6",
153 | "m",
154 | "l",
155 | "Y",
156 | ";",
157 | "O",
158 | "c",
159 | "f",
160 | "6",
161 | "q",
162 | "\r",
163 | "z",
164 | "0",
165 | "^",
166 | "N",
167 | "o",
168 | "X",
169 | "u",
170 | ":",
171 | "U",
172 | "=",
173 | "K",
174 | "d",
175 | "%",
176 | "Y",
177 | "H",
178 | "Q",
179 | "\"",
180 | "V",
181 | ".",
182 | "1",
183 | "7",
184 | "%",
185 | "6",
186 | "D",
187 | "5",
188 | "R",
189 | "t",
190 | "5",
191 | "5",
192 | "~",
193 | ">",
194 | "s",
195 | "@",
196 | "]",
197 | "X",
198 | "~",
199 | "x",
200 | "c",
201 | "<",
202 | "\"",
203 | "i",
204 | "8",
205 | "o",
206 | ">",
207 | "M",
208 | "^",
209 | "]",
210 | "'",
211 | "s",
212 | "9",
213 | "6",
214 | "x",
215 | "3",
216 | "d",
217 | "x",
218 | ":",
219 | "=",
220 | "]",
221 | "M",
222 | ":",
223 | "(",
224 | "l",
225 | ":",
226 | "&",
227 | "S",
228 | "o",
229 | "r",
230 | "z",
231 | "z",
232 | "R",
233 | "N",
234 | "G",
235 | "b",
236 | "L",
237 | "h",
238 | "\t",
239 | "y",
240 | "R",
241 | ".",
242 | "X",
243 | "x",
244 | "Z",
245 | "[",
246 | "g",
247 | ",",
248 | "3",
249 | "K",
250 | "\n",
251 | "[",
252 | "O",
253 | "f",
254 | "L",
255 | "$",
256 | "`",
257 | "\n",
258 | "p",
259 | "s",
260 | "R",
261 | "/",
262 | "v",
263 | "$",
264 | "i",
265 | "J",
266 | "S",
267 | "W",
268 | " ",
269 | "'",
270 | "4",
271 | "Q",
272 | "h",
273 | ":",
274 | "<",
275 | "f",
276 | "T",
277 | "1",
278 | "h",
279 | "8",
280 | "&",
281 | "W",
282 | "5",
283 | "h",
284 | "=",
285 | "l",
286 | "-",
287 | "3",
288 | "L",
289 | "b",
290 | ":",
291 | "_",
292 | "z",
293 | "&",
294 | "l",
295 | "\r",
296 | "v",
297 | "#",
298 | "J",
299 | "G",
300 | "T",
301 | ":",
302 | "%",
303 | ")",
304 | "D",
305 | "h",
306 | "Q",
307 | "H",
308 | "b",
309 | "l",
310 | ";",
311 | "o",
312 | ",",
313 | "T",
314 | "H",
315 | "b",
316 | " ",
317 | "G",
318 | "|",
319 | "\\",
320 | "n",
321 | "2",
322 | "u",
323 | "h",
324 | "?",
325 | " ",
326 | "j",
327 | "g",
328 | "Q",
329 | "m",
330 | ";",
331 | "5",
332 | "]",
333 | "\f",
334 | ".",
335 | "|",
336 | "I",
337 | "~",
338 | "?",
339 | "`",
340 | "x",
341 | "]",
342 | "e",
343 | "b",
344 | "q",
345 | ")",
346 | "N",
347 | "6",
348 | "3",
349 | "T",
350 | "_",
351 | "K",
352 | "<",
353 | "4",
354 | "a",
355 | "3",
356 | "P",
357 | "Y",
358 | "V",
359 | "?",
360 | "G",
361 | "}",
362 | "6",
363 | "g",
364 | "U",
365 | "8",
366 | "F",
367 | "G",
368 | ";",
369 | "G",
370 | "=",
371 | "%",
372 | "(",
373 | "Z",
374 | "\\",
375 | "E",
376 | "W",
377 | "\"",
378 | "A",
379 | "e",
380 | "P",
381 | "y",
382 | "Y",
383 | "F",
384 | "B",
385 | "*",
386 | "\n",
387 | "|",
388 | "c",
389 | "@",
390 | "A",
391 | ")",
392 | "K",
393 | "P",
394 | "=",
395 | "j",
396 | "?",
397 | "^",
398 | "G",
399 | "4",
400 | "j",
401 | "y",
402 | ":",
403 | "]",
404 | "1",
405 | "]",
406 | "U",
407 | ">",
408 | "L",
409 | "M",
410 | "5",
411 | "(",
412 | "X",
413 | "h",
414 | "\"",
415 | "!",
416 | "U",
417 | "$",
418 | "6",
419 | "_",
420 | "h",
421 | "9",
422 | "n",
423 | "\t",
424 | "U",
425 | "X",
426 | "W",
427 | "1",
428 | "&",
429 | "k",
430 | "m",
431 | "[",
432 | "[",
433 | "?",
434 | ";",
435 | "\f",
436 | "t",
437 | "\r",
438 | "A",
439 | "L",
440 | "Z",
441 | "C",
442 | "S",
443 | "i",
444 | " ",
445 | ")",
446 | "1",
447 | "3",
448 | "@",
449 | "|",
450 | "u",
451 | "|",
452 | "_",
453 | "B",
454 | " ",
455 | "v",
456 | "`",
457 | "7",
458 | "P",
459 | "{",
460 | "\f",
461 | "Z",
462 | "=",
463 | "T",
464 | "$",
465 | "*",
466 | ")",
467 | "*",
468 | "(",
469 | "y",
470 | "[",
471 | "B",
472 | "1",
473 | "u",
474 | ";",
475 | "L",
476 | "3",
477 | "-",
478 | "o",
479 | "i",
480 | "\n",
481 | "1",
482 | ";",
483 | "F",
484 | "K",
485 | "H",
486 | "6",
487 | "H",
488 | "V",
489 | "w",
490 | "X",
491 | ".",
492 | "C",
493 | "t",
494 | "c",
495 | "*",
496 | "b",
497 | "k",
498 | "p",
499 | "d",
500 | "F",
501 | ">",
502 | "J",
503 | "w",
504 | "n",
505 | "E",
506 | "v",
507 | "4",
508 | "{",
509 | "3",
510 | "o",
511 | "J",
512 | "&",
513 | "R",
514 | "X",
515 | "w",
516 | "\r",
517 | "\n",
518 | "Y",
519 | "M",
520 | "]",
521 | "g",
522 | "6",
523 | "\n",
524 | "C",
525 | "U",
526 | "!",
527 | "5",
528 | "]",
529 | "q",
530 | "e",
531 | "t",
532 | "Q",
533 | "a",
534 | "Y",
535 | "P",
536 | "G",
537 | "p",
538 | "8",
539 | "U",
540 | "<",
541 | ",",
542 | "C",
543 | "o",
544 | "F",
545 | "m",
546 | "\f",
547 | "T",
548 | "\n",
549 | "E",
550 | "g",
551 | "h",
552 | "&",
553 | "J",
554 | "U",
555 | "9",
556 | "X",
557 | "u",
558 | "1",
559 | "o",
560 | "\r",
561 | "\f",
562 | ";",
563 | "(",
564 | "z",
565 | "I",
566 | "i",
567 | "n",
568 | "4",
569 | "L",
570 | "x",
571 | "?",
572 | "(",
573 | "U",
574 | "m",
575 | "h",
576 | "Z",
577 | "2",
578 | "r",
579 | "v",
580 | "f",
581 | "3",
582 | "s",
583 | "U",
584 | "S",
585 | "+",
586 | "=",
587 | "D",
588 | ",",
589 | ":",
590 | "~",
591 | "}",
592 | ":",
593 | "Q",
594 | "L",
595 | "{",
596 | "E",
597 | "_",
598 | "W",
599 | "s",
600 | "p",
601 | "\"",
602 | "5",
603 | "T",
604 | "\\",
605 | "~",
606 | "z",
607 | "\f",
608 | "-",
609 | "G",
610 | "-",
611 | "5",
612 | "2",
613 | "K",
614 | "t",
615 | "[",
616 | "Y",
617 | "J",
618 | ">",
619 | "-",
620 | "l",
621 | ">",
622 | ">",
623 | ",",
624 | "t",
625 | "&",
626 | "A",
627 | "[",
628 | "(",
629 | "^",
630 | "f",
631 | "P",
632 | "~",
633 | " ",
634 | "#",
635 | "w",
636 | "h",
637 | "@",
638 | "W",
639 | "~",
640 | "|",
641 | "y",
642 | "r",
643 | "~",
644 | "2",
645 | "x",
646 | "5",
647 | "j",
648 | "@",
649 | "N",
650 | "G",
651 | "$",
652 | "1",
653 | "F",
654 | "K",
655 | "4",
656 | "b",
657 | "N",
658 | "N",
659 | "o",
660 | "N",
661 | "N",
662 | "(",
663 | "g",
664 | "t",
665 | "s",
666 | "|",
667 | "G",
668 | "X",
669 | "_",
670 | "c",
671 | "7",
672 | ";",
673 | "W",
674 | "S",
675 | "n",
676 | "\\",
677 | "=",
678 | "P",
679 | "h",
680 | "V",
681 | "4",
682 | "z",
683 | "\f",
684 | "8",
685 | "=",
686 | "l",
687 | "D",
688 | "r",
689 | "|",
690 | "a",
691 | "s",
692 | "_",
693 | "f",
694 | "l",
695 | "E",
696 | "L",
697 | "p",
698 | "3",
699 | "8",
700 | "F",
701 | "?",
702 | "e",
703 | "I",
704 | "c",
705 | ">",
706 | "X",
707 | "O",
708 | "k",
709 | "r",
710 | "t",
711 | "~",
712 | "9",
713 | "A",
714 | "\n",
715 | "7",
716 | "5",
717 | "!",
718 | "i",
719 | "!",
720 | "Z",
721 | "9",
722 | ",",
723 | "W",
724 | "~",
725 | "'",
726 | "/",
727 | ".",
728 | "(",
729 | "B",
730 | "a",
731 | "[",
732 | "'",
733 | "t",
734 | "j",
735 | "!",
736 | "9",
737 | "^",
738 | "~",
739 | "_",
740 | "`",
741 | "(",
742 | "-",
743 | "*",
744 | ">",
745 | " ",
746 | "f",
747 | "W",
748 | "f",
749 | "7",
750 | "]",
751 | "p",
752 | "J",
753 | "h",
754 | "3",
755 | "e",
756 | "{",
757 | "%",
758 | "\"",
759 | "0",
760 | "F",
761 | "0",
762 | "Z",
763 | "\"",
764 | "V",
765 | "M",
766 | "+",
767 | "=",
768 | "I",
769 | "'",
770 | "?",
771 | "-",
772 | "V",
773 | "R",
774 | "m",
775 | "p",
776 | "%",
777 | "?",
778 | "`",
779 | "R",
780 | "8",
781 | "^",
782 | "4",
783 | "3",
784 | "b",
785 | "9",
786 | "q",
787 | "V",
788 | "M",
789 | "e",
790 | "N",
791 | "D",
792 | "G",
793 | "!",
794 | "&",
795 | "^",
796 | "z",
797 | "V",
798 | "J",
799 | "O",
800 | "M",
801 | "5",
802 | "L",
803 | "H",
804 | "+",
805 | ";",
806 | "_",
807 | "e",
808 | "X",
809 | "J",
810 | "W",
811 | "C",
812 | "L",
813 | "X",
814 | "3",
815 | "[",
816 | "a",
817 | "-",
818 | "3",
819 | "U",
820 | "t",
821 | "S",
822 | "v",
823 | "\\",
824 | "6",
825 | "J",
826 | "u",
827 | "D",
828 | "_",
829 | "I",
830 | "t",
831 | "E",
832 | "t",
833 | "V",
834 | "D",
835 | ",",
836 | "X",
837 | "7",
838 | "@",
839 | "l",
840 | "t",
841 | "I",
842 | "Q",
843 | "=",
844 | "z",
845 | "R",
846 | "+",
847 | "O",
848 | "9",
849 | "U",
850 | "N",
851 | "%",
852 | "m",
853 | "Z",
854 | "Z",
855 | "h",
856 | "e",
857 | "`",
858 | "|",
859 | " ",
860 | ",",
861 | "0",
862 | "0",
863 | "m",
864 | "$",
865 | "/",
866 | "X",
867 | "g",
868 | "<",
869 | "w",
870 | "a",
871 | "h",
872 | "=",
873 | "R",
874 | "y",
875 | "q",
876 | ";",
877 | "G",
878 | "H",
879 | "v",
880 | "`",
881 | "P",
882 | "W",
883 | "c",
884 | "X",
885 | "z",
886 | "Z",
887 | "6",
888 | "v",
889 | "u",
890 | "*",
891 | "i",
892 | "\\",
893 | "V",
894 | "{",
895 | "a",
896 | "W",
897 | "S",
898 | "}",
899 | "d",
900 | "\r",
901 | ";",
902 | "(",
903 | "b",
904 | "p",
905 | "q",
906 | "w",
907 | "%",
908 | "W",
909 | "T",
910 | "\f",
911 | "\\",
912 | "T",
913 | "Z",
914 | "@",
915 | "-",
916 | "-",
917 | "\"",
918 | "f",
919 | "b",
920 | "W",
921 | "s",
922 | "!",
923 | "9",
924 | "z",
925 | "^",
926 | "Z",
927 | "*",
928 | "f",
929 | "i",
930 | "P",
931 | "z",
932 | "}",
933 | "z",
934 | "k",
935 | "{",
936 | "*",
937 | "4",
938 | ">",
939 | "O",
940 | "=",
941 | "Z",
942 | "c",
943 | "8",
944 | "'",
945 | ">",
946 | "G",
947 | "%",
948 | "\f",
949 | "b",
950 | "R",
951 | "(",
952 | ":",
953 | "n",
954 | "Q",
955 | "~",
956 | "i",
957 | "P",
958 | "\t",
959 | "K",
960 | "x",
961 | "l",
962 | "/",
963 | "u",
964 | "h",
965 | "j",
966 | "8",
967 | "N",
968 | "p",
969 | "4",
970 | "^",
971 | "c",
972 | ":",
973 | "q",
974 | "\f",
975 | "]",
976 | "v",
977 | "o",
978 | ";",
979 | "@",
980 | "H",
981 | "n",
982 | "9",
983 | "R",
984 | "1",
985 | "A",
986 | "0",
987 | "^",
988 | "=",
989 | "c",
990 | "6",
991 | "Z",
992 | "k",
993 | ":",
994 | "1",
995 | "$",
996 | "j",
997 | "g",
998 | "G",
999 | "Y",
1000 | "|",
1001 | "l",
1002 | "]",
1003 | "~",
1004 | "*",
1005 | "g",
1006 | "m",
1007 | "-",
1008 | "u",
1009 | "L",
1010 | "*",
1011 | "N",
1012 | "Y",
1013 | "5",
1014 | "_",
1015 | "_",
1016 | "L",
1017 | "F",
1018 | "|",
1019 | "\"",
1020 | "x",
1021 | ";",
1022 | "1",
1023 | "n",
1024 | "A",
1025 | "w",
1026 | "t",
1027 | "S",
1028 | "[",
1029 | "k",
1030 | "H",
1031 | "\"",
1032 | "$",
1033 | "#",
1034 | "f",
1035 | "%",
1036 | "3",
1037 | "|",
1038 | "m",
1039 | "/",
1040 | "!",
1041 | "@",
1042 | "}",
1043 | "'",
1044 | "h",
1045 | "j",
1046 | "M",
1047 | "&",
1048 | "e",
1049 | "C",
1050 | ".",
1051 | "W",
1052 | "&",
1053 | "4",
1054 | "{",
1055 | "h",
1056 | "{",
1057 | "h",
1058 | "8",
1059 | " ",
1060 | "v",
1061 | "e",
1062 | "I",
1063 | "D",
1064 | "z",
1065 | ")",
1066 | "T",
1067 | "J",
1068 | "R",
1069 | "+",
1070 | "J",
1071 | "y",
1072 | "|",
1073 | "\\",
1074 | "c",
1075 | "c",
1076 | "$",
1077 | "G",
1078 | "4",
1079 | "#",
1080 | "[",
1081 | "\n",
1082 | "`",
1083 | "s",
1084 | "u",
1085 | "/",
1086 | "\"",
1087 | "-",
1088 | "Y",
1089 | "(",
1090 | "M",
1091 | "-",
1092 | "i",
1093 | "L",
1094 | "I",
1095 | "o",
1096 | ".",
1097 | "P",
1098 | "O",
1099 | "b",
1100 | "}",
1101 | "a",
1102 | "1",
1103 | "[",
1104 | "x",
1105 | "O",
1106 | "0",
1107 | "@",
1108 | "S",
1109 | "^",
1110 | "3",
1111 | "(",
1112 | "'",
1113 | "h",
1114 | "J",
1115 | "!",
1116 | "#",
1117 | "K",
1118 | "O",
1119 | "A",
1120 | "~",
1121 | "7",
1122 | "$",
1123 | ",",
1124 | "O",
1125 | "Z",
1126 | "y",
1127 | " ",
1128 | "4",
1129 | "{",
1130 | "H",
1131 | "r",
1132 | "U",
1133 | "[",
1134 | "M",
1135 | "@",
1136 | "b",
1137 | "H",
1138 | "V",
1139 | "e",
1140 | "V",
1141 | "4",
1142 | "\f",
1143 | "<",
1144 | "a",
1145 | "\r",
1146 | "s",
1147 | "y",
1148 | "x",
1149 | "w",
1150 | "X",
1151 | "Z",
1152 | "8",
1153 | "Y",
1154 | "h",
1155 | ")",
1156 | "s",
1157 | "`",
1158 | "Z",
1159 | "c",
1160 | "b",
1161 | ".",
1162 | "+",
1163 | "Q",
1164 | ">",
1165 | "\"",
1166 | "Y",
1167 | "/",
1168 | "G",
1169 | "]",
1170 | "'",
1171 | "5",
1172 | "*",
1173 | ":",
1174 | "k",
1175 | "1",
1176 | "~",
1177 | "N",
1178 | "^",
1179 | "?",
1180 | "k",
1181 | "j",
1182 | "/",
1183 | "W",
1184 | "u",
1185 | ":",
1186 | "s",
1187 | "\t",
1188 | "\"",
1189 | "|",
1190 | "6",
1191 | "a",
1192 | "8",
1193 | "#",
1194 | "f",
1195 | "F",
1196 | "A",
1197 | "w",
1198 | "z",
1199 | ".",
1200 | "1",
1201 | "[",
1202 | "h",
1203 | "g",
1204 | "H",
1205 | "A",
1206 | "}",
1207 | "v",
1208 | "y",
1209 | "z",
1210 | "P",
1211 | "%",
1212 | "1",
1213 | "^",
1214 | "l",
1215 | "$",
1216 | "\n",
1217 | "<",
1218 | "f",
1219 | "D",
1220 | "A",
1221 | "W",
1222 | "h",
1223 | "R",
1224 | "P",
1225 | "N",
1226 | "'",
1227 | "7",
1228 | "m",
1229 | "2",
1230 | "z",
1231 | "|",
1232 | "V",
1233 | "l",
1234 | "r",
1235 | "/",
1236 | "B",
1237 | "f",
1238 | "e",
1239 | "n",
1240 | "S",
1241 | "'",
1242 | "_",
1243 | "+",
1244 | "E",
1245 | "s",
1246 | "v",
1247 | ">",
1248 | "<",
1249 | "V",
1250 | "-",
1251 | "D",
1252 | ":",
1253 | "0",
1254 | "j",
1255 | "h",
1256 | "}",
1257 | "!",
1258 | "E",
1259 | "b",
1260 | "a",
1261 | "/",
1262 | "?",
1263 | "h",
1264 | "#",
1265 | "\t",
1266 | "@",
1267 | "m",
1268 | "|",
1269 | "T",
1270 | "h",
1271 | "L",
1272 | "]",
1273 | "7",
1274 | "h",
1275 | "g",
1276 | "K",
1277 | "&",
1278 | "(",
1279 | ";",
1280 | "\f",
1281 | "g",
1282 | "k",
1283 | "1",
1284 | "x",
1285 | "7",
1286 | "<",
1287 | "m",
1288 | "b",
1289 | "@",
1290 | "L",
1291 | "W",
1292 | ">",
1293 | "-",
1294 | "&",
1295 | "f",
1296 | "z",
1297 | "&",
1298 | "\n",
1299 | "\r",
1300 | "O",
1301 | "s",
1302 | "z",
1303 | " ",
1304 | "3",
1305 | "s",
1306 | "@",
1307 | "m",
1308 | "*",
1309 | "j",
1310 | "S",
1311 | "]",
1312 | "D",
1313 | "k",
1314 | ")",
1315 | "i",
1316 | "V",
1317 | "&",
1318 | "#",
1319 | ")",
1320 | "v",
1321 | "t",
1322 | "$",
1323 | "I",
1324 | "L",
1325 | "S",
1326 | "N",
1327 | "s",
1328 | "u",
1329 | "E",
1330 | "s",
1331 | "7",
1332 | "f",
1333 | "]",
1334 | "h",
1335 | "d",
1336 | "f",
1337 | "L",
1338 | "f",
1339 | "/",
1340 | "S",
1341 | "F",
1342 | "'",
1343 | "]",
1344 | "}",
1345 | "u",
1346 | "\f",
1347 | "S",
1348 | "7",
1349 | "b",
1350 | "Q",
1351 | "}",
1352 | " ",
1353 | "2",
1354 | "7",
1355 | "{",
1356 | "^",
1357 | ".",
1358 | "J",
1359 | "m",
1360 | "G",
1361 | "g",
1362 | "x",
1363 | ":",
1364 | ",",
1365 | "A",
1366 | ")",
1367 | ">",
1368 | "v",
1369 | "m",
1370 | "!",
1371 | "S",
1372 | "\r",
1373 | "K",
1374 | "<",
1375 | "Z",
1376 | "%",
1377 | "s",
1378 | "b",
1379 | "s",
1380 | "k",
1381 | "$",
1382 | "2",
1383 | "R",
1384 | "$",
1385 | "$",
1386 | "]",
1387 | "W",
1388 | "E",
1389 | "4",
1390 | "$",
1391 | "&",
1392 | "i",
1393 | ")",
1394 | " ",
1395 | "q",
1396 | "1",
1397 | "v",
1398 | ".",
1399 | "s",
1400 | "m",
1401 | "W",
1402 | "G",
1403 | "D",
1404 | ".",
1405 | "&",
1406 | "5",
1407 | "h",
1408 | "V",
1409 | "x",
1410 | ";",
1411 | "?",
1412 | "'",
1413 | "R",
1414 | "-",
1415 | "8",
1416 | "s",
1417 | "P",
1418 | "\t",
1419 | "^",
1420 | "\f",
1421 | "(",
1422 | ")",
1423 | "3",
1424 | "m",
1425 | "v",
1426 | "~",
1427 | "~",
1428 | "j",
1429 | "+",
1430 | "D",
1431 | "y",
1432 | "a",
1433 | "F",
1434 | "T",
1435 | "C",
1436 | ".",
1437 | "X",
1438 | "L",
1439 | "\n",
1440 | "D",
1441 | "4",
1442 | ",",
1443 | "j",
1444 | "u",
1445 | "N",
1446 | "(",
1447 | "R",
1448 | "'",
1449 | "k",
1450 | "O",
1451 | "\f",
1452 | "s",
1453 | "X",
1454 | "s",
1455 | "|",
1456 | "F",
1457 | ".",
1458 | "e",
1459 | "^",
1460 | "!",
1461 | "W",
1462 | "a",
1463 | "\n",
1464 | "D",
1465 | ";",
1466 | "e",
1467 | ":",
1468 | "N",
1469 | "1",
1470 | "k",
1471 | "f",
1472 | "[",
1473 | "H",
1474 | "'",
1475 | "X",
1476 | "0",
1477 | "Q",
1478 | "\f",
1479 | "m",
1480 | "x",
1481 | "]",
1482 | "#",
1483 | "j",
1484 | "\f",
1485 | "4",
1486 | "@",
1487 | "`",
1488 | "J",
1489 | "c",
1490 | "\\",
1491 | "|",
1492 | "(",
1493 | "\t",
1494 | "E",
1495 | "%",
1496 | "%",
1497 | "O",
1498 | "D",
1499 | "}",
1500 | "e",
1501 | "=",
1502 | ")",
1503 | ")",
1504 | "s",
1505 | "'",
1506 | "L",
1507 | "j",
1508 | "F",
1509 | ".",
1510 | "r",
1511 | "S",
1512 | "6",
1513 | "\f",
1514 | "g",
1515 | "l",
1516 | "\"",
1517 | "N",
1518 | "6",
1519 | "L",
1520 | "S",
1521 | "(",
1522 | "]",
1523 | ")",
1524 | " ",
1525 | "x",
1526 | "Q",
1527 | "1",
1528 | "x",
1529 | "A",
1530 | "o",
1531 | "O",
1532 | "1",
1533 | "G",
1534 | "\r",
1535 | "Q",
1536 | "<",
1537 | "U",
1538 | "~",
1539 | "h",
1540 | "O",
1541 | "V",
1542 | "[",
1543 | "\f",
1544 | "F",
1545 | "7",
1546 | "z",
1547 | "4",
1548 | "X",
1549 | "Q",
1550 | "C",
1551 | "&",
1552 | "d",
1553 | "e",
1554 | "g",
1555 | "\n",
1556 | "Y",
1557 | "\"",
1558 | "q",
1559 | "w",
1560 | "\t",
1561 | "h",
1562 | "[",
1563 | "T",
1564 | "!",
1565 | "z",
1566 | "`",
1567 | "Q",
1568 | "M",
1569 | "4",
1570 | "4",
1571 | "5",
1572 | "w",
1573 | "8",
1574 | "[",
1575 | "j",
1576 | "s",
1577 | "G",
1578 | "?",
1579 | "1",
1580 | "j",
1581 | "%",
1582 | "3",
1583 | "3",
1584 | " ",
1585 | "j",
1586 | "r",
1587 | "/",
1588 | "n",
1589 | "d",
1590 | "V",
1591 | "Z",
1592 | "X",
1593 | "%",
1594 | "0",
1595 | "v",
1596 | ".",
1597 | "K",
1598 | "\"",
1599 | "s",
1600 | ">",
1601 | "F",
1602 | "g",
1603 | "|",
1604 | ";",
1605 | "\t",
1606 | "I",
1607 | "+",
1608 | "[",
1609 | "?",
1610 | "i",
1611 | "H",
1612 | "#",
1613 | "9",
1614 | "h",
1615 | "O",
1616 | "j",
1617 | "H",
1618 | "g",
1619 | "\r",
1620 | "=",
1621 | "J",
1622 | "u",
1623 | "n",
1624 | "8",
1625 | "/",
1626 | "%",
1627 | "V",
1628 | "a",
1629 | ".",
1630 | " ",
1631 | "j",
1632 | "t",
1633 | "Z",
1634 | "]",
1635 | "+",
1636 | "+",
1637 | "r",
1638 | "P",
1639 | "^",
1640 | "$",
1641 | "e",
1642 | "R",
1643 | "d",
1644 | "\r",
1645 | "x",
1646 | "(",
1647 | "c",
1648 | "+",
1649 | "/",
1650 | ";",
1651 | "=",
1652 | "h",
1653 | "B",
1654 | "J",
1655 | "2",
1656 | "A",
1657 | "R",
1658 | "@",
1659 | "5",
1660 | " ",
1661 | "N",
1662 | "I",
1663 | "B",
1664 | "q",
1665 | "Q",
1666 | "B",
1667 | "N",
1668 | "9",
1669 | "l",
1670 | "v",
1671 | "X",
1672 | "6",
1673 | "p",
1674 | "0",
1675 | "]",
1676 | "r",
1677 | ",",
1678 | "\\",
1679 | "x",
1680 | "q",
1681 | "v",
1682 | "o",
1683 | "2",
1684 | "s",
1685 | "k",
1686 | "e",
1687 | ";",
1688 | "Y",
1689 | "x",
1690 | "F",
1691 | "Z",
1692 | "u",
1693 | "?",
1694 | "d",
1695 | "M",
1696 | "\\",
1697 | "Y",
1698 | "2",
1699 | "0",
1700 | "u",
1701 | "u",
1702 | "O",
1703 | "l",
1704 | "P",
1705 | "@",
1706 | ".",
1707 | "\n",
1708 | "&",
1709 | "m",
1710 | "b",
1711 | "/",
1712 | "U",
1713 | "A",
1714 | "J",
1715 | "X",
1716 | "m",
1717 | "]",
1718 | "M",
1719 | "k",
1720 | "W",
1721 | "]",
1722 | "'",
1723 | "A",
1724 | "W",
1725 | "b",
1726 | "E",
1727 | "m",
1728 | ".",
1729 | "=",
1730 | "2",
1731 | "o",
1732 | "r",
1733 | "J",
1734 | "G",
1735 | "{",
1736 | "W",
1737 | "D",
1738 | "L",
1739 | "y",
1740 | "F",
1741 | "Z",
1742 | "V",
1743 | ",",
1744 | "u",
1745 | "3",
1746 | "[",
1747 | "H",
1748 | "6",
1749 | "t",
1750 | "|",
1751 | "v",
1752 | "Z",
1753 | "#",
1754 | ";",
1755 | "1",
1756 | "!",
1757 | "7",
1758 | "=",
1759 | "O",
1760 | "_",
1761 | "}",
1762 | "2",
1763 | "H",
1764 | "g",
1765 | ")",
1766 | "e",
1767 | "*",
1768 | "k",
1769 | "r",
1770 | "{",
1771 | "3",
1772 | "3",
1773 | "\r",
1774 | "N",
1775 | "Y",
1776 | "A",
1777 | "\r",
1778 | "s",
1779 | "O",
1780 | " ",
1781 | "X",
1782 | "I",
1783 | "p",
1784 | "a",
1785 | "=",
1786 | "4",
1787 | "B",
1788 | "\r",
1789 | "N",
1790 | ")",
1791 | "f",
1792 | "_",
1793 | " ",
1794 | "n",
1795 | "z",
1796 | "<",
1797 | "E",
1798 | "x",
1799 | "-",
1800 | "S",
1801 | "b",
1802 | "\n",
1803 | "X",
1804 | "X",
1805 | "W",
1806 | "e",
1807 | "!",
1808 | "@",
1809 | "O",
1810 | "K",
1811 | "m",
1812 | "=",
1813 | ">",
1814 | ">",
1815 | "@",
1816 | ";",
1817 | "\r",
1818 | "S",
1819 | "\r",
1820 | "<",
1821 | "i",
1822 | "%",
1823 | "V",
1824 | "c",
1825 | "\"",
1826 | ">",
1827 | "y",
1828 | "8",
1829 | "w",
1830 | "n",
1831 | "l",
1832 | ".",
1833 | "6",
1834 | "(",
1835 | "\t",
1836 | "|",
1837 | ".",
1838 | "j",
1839 | "5",
1840 | "2",
1841 | "|",
1842 | "0",
1843 | "R",
1844 | "h",
1845 | "(",
1846 | "!",
1847 | "1",
1848 | "s",
1849 | "Y",
1850 | "O",
1851 | "=",
1852 | "~",
1853 | "|",
1854 | "6",
1855 | "@",
1856 | "r",
1857 | "I",
1858 | "I",
1859 | "u",
1860 | "2",
1861 | "V",
1862 | "P",
1863 | "y",
1864 | "[",
1865 | "(",
1866 | "P",
1867 | "3",
1868 | "p",
1869 | "`",
1870 | "W",
1871 | "\t",
1872 | "=",
1873 | "i",
1874 | "/",
1875 | "s",
1876 | "k",
1877 | "g",
1878 | "l",
1879 | "3",
1880 | "y",
1881 | "P",
1882 | "t",
1883 | "\f",
1884 | "9",
1885 | "d",
1886 | "9",
1887 | ":",
1888 | "M",
1889 | "c",
1890 | "/",
1891 | "/",
1892 | "N",
1893 | "e",
1894 | "(",
1895 | "n",
1896 | "v",
1897 | "l",
1898 | "o",
1899 | "<",
1900 | "I",
1901 | "^",
1902 | "w",
1903 | "^",
1904 | "A",
1905 | "=",
1906 | "h",
1907 | "\n",
1908 | "I",
1909 | "%",
1910 | "q",
1911 | "L",
1912 | "/",
1913 | ".",
1914 | "@",
1915 | "i",
1916 | "p",
1917 | "[",
1918 | "G",
1919 | "!",
1920 | "\n",
1921 | ">",
1922 | "A",
1923 | "B",
1924 | "m",
1925 | "C",
1926 | "V",
1927 | ")",
1928 | "(",
1929 | "i",
1930 | "\r",
1931 | "S",
1932 | "e",
1933 | "R",
1934 | "#",
1935 | "\r",
1936 | "S",
1937 | "P",
1938 | "\\",
1939 | "?",
1940 | "8",
1941 | "p",
1942 | "/",
1943 | "2",
1944 | "@",
1945 | "y",
1946 | "n",
1947 | "P",
1948 | "n",
1949 | " ",
1950 | "*",
1951 | "!",
1952 | "8",
1953 | "\r",
1954 | "h",
1955 | "E",
1956 | "y",
1957 | ".",
1958 | ";",
1959 | "'",
1960 | "O",
1961 | "f",
1962 | "X",
1963 | " ",
1964 | "\"",
1965 | "q",
1966 | "M",
1967 | "#",
1968 | "R",
1969 | "C",
1970 | "l",
1971 | "V",
1972 | "r",
1973 | "S",
1974 | "_",
1975 | "Z",
1976 | ">",
1977 | "3",
1978 | "X",
1979 | "\"",
1980 | "n",
1981 | "3",
1982 | "H",
1983 | "9",
1984 | "2",
1985 | "W",
1986 | "=",
1987 | "'",
1988 | "w",
1989 | "\t",
1990 | "$",
1991 | "A",
1992 | "P",
1993 | "V",
1994 | "h",
1995 | "E",
1996 | "Y",
1997 | "i",
1998 | "Y",
1999 | "D",
2000 | "b",
2001 | "F",
2002 | "-",
2003 | "H",
2004 | "z",
2005 | "Z",
2006 | "A",
2007 | ".",
2008 | "k",
2009 | "\n",
2010 | "5",
2011 | "[",
2012 | ")",
2013 | "\t",
2014 | "L",
2015 | "n",
2016 | "4",
2017 | ";",
2018 | ",",
2019 | "U",
2020 | "b",
2021 | "n",
2022 | "p",
2023 | "n",
2024 | "&",
2025 | "K",
2026 | "3",
2027 | ".",
2028 | "r",
2029 | "b",
2030 | "*",
2031 | "t",
2032 | "y",
2033 | ")",
2034 | "\"",
2035 | "H",
2036 | "8",
2037 | "<",
2038 | "P",
2039 | "k",
2040 | "r",
2041 | "9",
2042 | "'",
2043 | "'",
2044 | "E",
2045 | "h",
2046 | "h",
2047 | "%",
2048 | "9",
2049 | "}"
2050 | ]
2051 |
--------------------------------------------------------------------------------
/test/performance-json/vector-of-nil.json:
--------------------------------------------------------------------------------
1 | [
2 | null,
3 | null,
4 | null,
5 | null,
6 | null,
7 | null,
8 | null,
9 | null,
10 | null,
11 | null,
12 | null,
13 | null,
14 | null,
15 | null,
16 | null,
17 | null,
18 | null,
19 | null,
20 | null,
21 | null,
22 | null,
23 | null,
24 | null,
25 | null,
26 | null,
27 | null,
28 | null,
29 | null,
30 | null,
31 | null,
32 | null,
33 | null,
34 | null,
35 | null,
36 | null,
37 | null,
38 | null,
39 | null,
40 | null,
41 | null,
42 | null,
43 | null,
44 | null,
45 | null,
46 | null,
47 | null,
48 | null,
49 | null,
50 | null,
51 | null,
52 | null,
53 | null,
54 | null,
55 | null,
56 | null,
57 | null,
58 | null,
59 | null,
60 | null,
61 | null,
62 | null,
63 | null,
64 | null,
65 | null,
66 | null,
67 | null,
68 | null,
69 | null,
70 | null,
71 | null,
72 | null,
73 | null,
74 | null,
75 | null,
76 | null,
77 | null,
78 | null,
79 | null,
80 | null,
81 | null,
82 | null,
83 | null,
84 | null,
85 | null,
86 | null,
87 | null,
88 | null,
89 | null,
90 | null,
91 | null,
92 | null,
93 | null,
94 | null,
95 | null,
96 | null,
97 | null,
98 | null,
99 | null,
100 | null,
101 | null,
102 | null,
103 | null,
104 | null,
105 | null,
106 | null,
107 | null,
108 | null,
109 | null,
110 | null,
111 | null,
112 | null,
113 | null,
114 | null,
115 | null,
116 | null,
117 | null,
118 | null,
119 | null,
120 | null,
121 | null,
122 | null,
123 | null,
124 | null,
125 | null,
126 | null,
127 | null,
128 | null,
129 | null,
130 | null,
131 | null,
132 | null,
133 | null,
134 | null,
135 | null,
136 | null,
137 | null,
138 | null,
139 | null,
140 | null,
141 | null,
142 | null,
143 | null,
144 | null,
145 | null,
146 | null,
147 | null,
148 | null,
149 | null,
150 | null,
151 | null,
152 | null,
153 | null,
154 | null,
155 | null,
156 | null,
157 | null,
158 | null,
159 | null,
160 | null,
161 | null,
162 | null,
163 | null,
164 | null,
165 | null,
166 | null,
167 | null,
168 | null,
169 | null,
170 | null,
171 | null,
172 | null,
173 | null,
174 | null,
175 | null,
176 | null,
177 | null,
178 | null,
179 | null,
180 | null,
181 | null,
182 | null,
183 | null,
184 | null,
185 | null,
186 | null,
187 | null,
188 | null,
189 | null,
190 | null,
191 | null,
192 | null,
193 | null,
194 | null,
195 | null,
196 | null,
197 | null,
198 | null,
199 | null,
200 | null,
201 | null,
202 | null,
203 | null,
204 | null,
205 | null,
206 | null,
207 | null,
208 | null,
209 | null,
210 | null,
211 | null,
212 | null,
213 | null,
214 | null,
215 | null,
216 | null,
217 | null,
218 | null,
219 | null,
220 | null,
221 | null,
222 | null,
223 | null,
224 | null,
225 | null,
226 | null,
227 | null,
228 | null,
229 | null,
230 | null,
231 | null,
232 | null,
233 | null,
234 | null,
235 | null,
236 | null,
237 | null,
238 | null,
239 | null,
240 | null,
241 | null,
242 | null,
243 | null,
244 | null,
245 | null,
246 | null,
247 | null,
248 | null,
249 | null,
250 | null,
251 | null,
252 | null,
253 | null,
254 | null,
255 | null,
256 | null,
257 | null,
258 | null,
259 | null,
260 | null,
261 | null,
262 | null,
263 | null,
264 | null,
265 | null,
266 | null,
267 | null,
268 | null,
269 | null,
270 | null,
271 | null,
272 | null,
273 | null,
274 | null,
275 | null,
276 | null,
277 | null,
278 | null,
279 | null,
280 | null,
281 | null,
282 | null,
283 | null,
284 | null,
285 | null,
286 | null,
287 | null,
288 | null,
289 | null,
290 | null,
291 | null,
292 | null,
293 | null,
294 | null,
295 | null,
296 | null,
297 | null,
298 | null,
299 | null,
300 | null,
301 | null,
302 | null,
303 | null,
304 | null,
305 | null,
306 | null,
307 | null,
308 | null,
309 | null,
310 | null,
311 | null,
312 | null,
313 | null,
314 | null,
315 | null,
316 | null,
317 | null,
318 | null,
319 | null,
320 | null,
321 | null,
322 | null,
323 | null,
324 | null,
325 | null,
326 | null,
327 | null,
328 | null,
329 | null,
330 | null,
331 | null,
332 | null,
333 | null,
334 | null,
335 | null,
336 | null,
337 | null,
338 | null,
339 | null,
340 | null,
341 | null,
342 | null,
343 | null,
344 | null,
345 | null,
346 | null,
347 | null,
348 | null,
349 | null,
350 | null,
351 | null,
352 | null,
353 | null,
354 | null,
355 | null,
356 | null,
357 | null,
358 | null,
359 | null,
360 | null,
361 | null,
362 | null,
363 | null,
364 | null,
365 | null,
366 | null,
367 | null,
368 | null,
369 | null,
370 | null,
371 | null,
372 | null,
373 | null,
374 | null,
375 | null,
376 | null,
377 | null,
378 | null,
379 | null,
380 | null,
381 | null,
382 | null,
383 | null,
384 | null,
385 | null,
386 | null,
387 | null,
388 | null,
389 | null,
390 | null,
391 | null,
392 | null,
393 | null,
394 | null,
395 | null,
396 | null,
397 | null,
398 | null,
399 | null,
400 | null,
401 | null,
402 | null,
403 | null,
404 | null,
405 | null,
406 | null,
407 | null,
408 | null,
409 | null,
410 | null,
411 | null,
412 | null,
413 | null,
414 | null,
415 | null,
416 | null,
417 | null,
418 | null,
419 | null,
420 | null,
421 | null,
422 | null,
423 | null,
424 | null,
425 | null,
426 | null,
427 | null,
428 | null,
429 | null,
430 | null,
431 | null,
432 | null,
433 | null,
434 | null,
435 | null,
436 | null,
437 | null,
438 | null,
439 | null,
440 | null,
441 | null,
442 | null,
443 | null,
444 | null,
445 | null,
446 | null,
447 | null,
448 | null,
449 | null,
450 | null,
451 | null,
452 | null,
453 | null,
454 | null,
455 | null,
456 | null,
457 | null,
458 | null,
459 | null,
460 | null,
461 | null,
462 | null,
463 | null,
464 | null,
465 | null,
466 | null,
467 | null,
468 | null,
469 | null,
470 | null,
471 | null,
472 | null,
473 | null,
474 | null,
475 | null,
476 | null,
477 | null,
478 | null,
479 | null,
480 | null,
481 | null,
482 | null,
483 | null,
484 | null,
485 | null,
486 | null,
487 | null,
488 | null,
489 | null,
490 | null,
491 | null,
492 | null,
493 | null,
494 | null,
495 | null,
496 | null,
497 | null,
498 | null,
499 | null,
500 | null,
501 | null,
502 | null,
503 | null,
504 | null,
505 | null,
506 | null,
507 | null,
508 | null,
509 | null,
510 | null,
511 | null,
512 | null,
513 | null,
514 | null,
515 | null,
516 | null,
517 | null,
518 | null,
519 | null,
520 | null,
521 | null,
522 | null,
523 | null,
524 | null,
525 | null,
526 | null,
527 | null,
528 | null,
529 | null,
530 | null,
531 | null,
532 | null,
533 | null,
534 | null,
535 | null,
536 | null,
537 | null,
538 | null,
539 | null,
540 | null,
541 | null,
542 | null,
543 | null,
544 | null,
545 | null,
546 | null,
547 | null,
548 | null,
549 | null,
550 | null,
551 | null,
552 | null,
553 | null,
554 | null,
555 | null,
556 | null,
557 | null,
558 | null,
559 | null,
560 | null,
561 | null,
562 | null,
563 | null,
564 | null,
565 | null,
566 | null,
567 | null,
568 | null,
569 | null,
570 | null,
571 | null,
572 | null,
573 | null,
574 | null,
575 | null,
576 | null,
577 | null,
578 | null,
579 | null,
580 | null,
581 | null,
582 | null,
583 | null,
584 | null,
585 | null,
586 | null,
587 | null,
588 | null,
589 | null,
590 | null,
591 | null,
592 | null,
593 | null,
594 | null,
595 | null,
596 | null,
597 | null,
598 | null,
599 | null,
600 | null,
601 | null,
602 | null,
603 | null,
604 | null,
605 | null,
606 | null,
607 | null,
608 | null,
609 | null,
610 | null,
611 | null,
612 | null,
613 | null,
614 | null,
615 | null,
616 | null,
617 | null,
618 | null,
619 | null,
620 | null,
621 | null,
622 | null,
623 | null,
624 | null,
625 | null,
626 | null,
627 | null,
628 | null,
629 | null,
630 | null,
631 | null,
632 | null,
633 | null,
634 | null,
635 | null,
636 | null,
637 | null,
638 | null,
639 | null,
640 | null,
641 | null,
642 | null,
643 | null,
644 | null,
645 | null,
646 | null,
647 | null,
648 | null,
649 | null,
650 | null,
651 | null,
652 | null,
653 | null,
654 | null,
655 | null,
656 | null,
657 | null,
658 | null,
659 | null,
660 | null,
661 | null,
662 | null,
663 | null,
664 | null,
665 | null,
666 | null,
667 | null,
668 | null,
669 | null,
670 | null,
671 | null,
672 | null,
673 | null,
674 | null,
675 | null,
676 | null,
677 | null,
678 | null,
679 | null,
680 | null,
681 | null,
682 | null,
683 | null,
684 | null,
685 | null,
686 | null,
687 | null,
688 | null,
689 | null,
690 | null,
691 | null,
692 | null,
693 | null,
694 | null,
695 | null,
696 | null,
697 | null,
698 | null,
699 | null,
700 | null,
701 | null,
702 | null,
703 | null,
704 | null,
705 | null,
706 | null,
707 | null,
708 | null,
709 | null,
710 | null,
711 | null,
712 | null,
713 | null,
714 | null,
715 | null,
716 | null,
717 | null,
718 | null,
719 | null,
720 | null,
721 | null,
722 | null,
723 | null,
724 | null,
725 | null,
726 | null,
727 | null,
728 | null,
729 | null,
730 | null,
731 | null,
732 | null,
733 | null,
734 | null,
735 | null,
736 | null,
737 | null,
738 | null,
739 | null,
740 | null,
741 | null,
742 | null,
743 | null,
744 | null,
745 | null,
746 | null,
747 | null,
748 | null,
749 | null,
750 | null,
751 | null,
752 | null,
753 | null,
754 | null,
755 | null,
756 | null,
757 | null,
758 | null,
759 | null,
760 | null,
761 | null,
762 | null,
763 | null,
764 | null,
765 | null,
766 | null,
767 | null,
768 | null,
769 | null,
770 | null,
771 | null,
772 | null,
773 | null,
774 | null,
775 | null,
776 | null,
777 | null,
778 | null,
779 | null,
780 | null,
781 | null,
782 | null,
783 | null,
784 | null,
785 | null,
786 | null,
787 | null,
788 | null,
789 | null,
790 | null,
791 | null,
792 | null,
793 | null,
794 | null,
795 | null,
796 | null,
797 | null,
798 | null,
799 | null,
800 | null,
801 | null,
802 | null,
803 | null,
804 | null,
805 | null,
806 | null,
807 | null,
808 | null,
809 | null,
810 | null,
811 | null,
812 | null,
813 | null,
814 | null,
815 | null,
816 | null,
817 | null,
818 | null,
819 | null,
820 | null,
821 | null,
822 | null,
823 | null,
824 | null,
825 | null,
826 | null,
827 | null,
828 | null,
829 | null,
830 | null,
831 | null,
832 | null,
833 | null,
834 | null,
835 | null,
836 | null,
837 | null,
838 | null,
839 | null,
840 | null,
841 | null,
842 | null,
843 | null,
844 | null,
845 | null,
846 | null,
847 | null,
848 | null,
849 | null,
850 | null,
851 | null,
852 | null,
853 | null,
854 | null,
855 | null,
856 | null,
857 | null,
858 | null,
859 | null,
860 | null,
861 | null,
862 | null,
863 | null,
864 | null,
865 | null,
866 | null,
867 | null,
868 | null,
869 | null,
870 | null,
871 | null,
872 | null,
873 | null,
874 | null,
875 | null,
876 | null,
877 | null,
878 | null,
879 | null,
880 | null,
881 | null,
882 | null,
883 | null,
884 | null,
885 | null,
886 | null,
887 | null,
888 | null,
889 | null,
890 | null,
891 | null,
892 | null,
893 | null,
894 | null,
895 | null,
896 | null,
897 | null,
898 | null,
899 | null,
900 | null,
901 | null,
902 | null,
903 | null,
904 | null,
905 | null,
906 | null,
907 | null,
908 | null,
909 | null,
910 | null,
911 | null,
912 | null,
913 | null,
914 | null,
915 | null,
916 | null,
917 | null,
918 | null,
919 | null,
920 | null,
921 | null,
922 | null,
923 | null,
924 | null,
925 | null,
926 | null,
927 | null,
928 | null,
929 | null,
930 | null,
931 | null,
932 | null,
933 | null,
934 | null,
935 | null,
936 | null,
937 | null,
938 | null,
939 | null,
940 | null,
941 | null,
942 | null,
943 | null,
944 | null,
945 | null,
946 | null,
947 | null,
948 | null,
949 | null,
950 | null,
951 | null,
952 | null,
953 | null,
954 | null,
955 | null,
956 | null,
957 | null,
958 | null,
959 | null,
960 | null,
961 | null,
962 | null,
963 | null,
964 | null,
965 | null,
966 | null,
967 | null,
968 | null,
969 | null,
970 | null,
971 | null,
972 | null,
973 | null,
974 | null,
975 | null,
976 | null,
977 | null,
978 | null,
979 | null,
980 | null,
981 | null,
982 | null,
983 | null,
984 | null,
985 | null,
986 | null,
987 | null,
988 | null,
989 | null,
990 | null,
991 | null,
992 | null,
993 | null,
994 | null,
995 | null,
996 | null,
997 | null,
998 | null,
999 | null,
1000 | null,
1001 | null,
1002 | null,
1003 | null,
1004 | null,
1005 | null,
1006 | null,
1007 | null,
1008 | null,
1009 | null,
1010 | null,
1011 | null,
1012 | null,
1013 | null,
1014 | null,
1015 | null,
1016 | null,
1017 | null,
1018 | null,
1019 | null,
1020 | null,
1021 | null,
1022 | null,
1023 | null,
1024 | null,
1025 | null,
1026 | null,
1027 | null,
1028 | null,
1029 | null,
1030 | null,
1031 | null,
1032 | null,
1033 | null,
1034 | null,
1035 | null,
1036 | null,
1037 | null,
1038 | null,
1039 | null,
1040 | null,
1041 | null,
1042 | null,
1043 | null,
1044 | null,
1045 | null,
1046 | null,
1047 | null,
1048 | null,
1049 | null,
1050 | null,
1051 | null,
1052 | null,
1053 | null,
1054 | null,
1055 | null,
1056 | null,
1057 | null,
1058 | null,
1059 | null,
1060 | null,
1061 | null,
1062 | null,
1063 | null,
1064 | null,
1065 | null,
1066 | null,
1067 | null,
1068 | null,
1069 | null,
1070 | null,
1071 | null,
1072 | null,
1073 | null,
1074 | null,
1075 | null,
1076 | null,
1077 | null,
1078 | null,
1079 | null,
1080 | null,
1081 | null,
1082 | null,
1083 | null,
1084 | null,
1085 | null,
1086 | null,
1087 | null,
1088 | null,
1089 | null,
1090 | null,
1091 | null,
1092 | null,
1093 | null,
1094 | null,
1095 | null,
1096 | null,
1097 | null,
1098 | null,
1099 | null,
1100 | null,
1101 | null,
1102 | null,
1103 | null,
1104 | null,
1105 | null,
1106 | null,
1107 | null,
1108 | null,
1109 | null,
1110 | null,
1111 | null,
1112 | null,
1113 | null,
1114 | null,
1115 | null,
1116 | null,
1117 | null,
1118 | null,
1119 | null,
1120 | null,
1121 | null,
1122 | null,
1123 | null,
1124 | null,
1125 | null,
1126 | null,
1127 | null,
1128 | null,
1129 | null,
1130 | null,
1131 | null,
1132 | null,
1133 | null,
1134 | null,
1135 | null,
1136 | null,
1137 | null,
1138 | null,
1139 | null,
1140 | null,
1141 | null,
1142 | null,
1143 | null,
1144 | null,
1145 | null,
1146 | null,
1147 | null,
1148 | null,
1149 | null,
1150 | null,
1151 | null,
1152 | null,
1153 | null,
1154 | null,
1155 | null,
1156 | null,
1157 | null,
1158 | null,
1159 | null,
1160 | null,
1161 | null,
1162 | null,
1163 | null,
1164 | null,
1165 | null,
1166 | null,
1167 | null,
1168 | null,
1169 | null,
1170 | null,
1171 | null,
1172 | null,
1173 | null,
1174 | null,
1175 | null,
1176 | null,
1177 | null,
1178 | null,
1179 | null,
1180 | null,
1181 | null,
1182 | null,
1183 | null,
1184 | null,
1185 | null,
1186 | null,
1187 | null,
1188 | null,
1189 | null,
1190 | null,
1191 | null,
1192 | null,
1193 | null,
1194 | null,
1195 | null,
1196 | null,
1197 | null,
1198 | null,
1199 | null,
1200 | null,
1201 | null,
1202 | null,
1203 | null,
1204 | null,
1205 | null,
1206 | null,
1207 | null,
1208 | null,
1209 | null,
1210 | null,
1211 | null,
1212 | null,
1213 | null,
1214 | null,
1215 | null,
1216 | null,
1217 | null,
1218 | null,
1219 | null,
1220 | null,
1221 | null,
1222 | null,
1223 | null,
1224 | null,
1225 | null,
1226 | null,
1227 | null,
1228 | null,
1229 | null,
1230 | null,
1231 | null,
1232 | null,
1233 | null,
1234 | null,
1235 | null,
1236 | null,
1237 | null,
1238 | null,
1239 | null,
1240 | null,
1241 | null,
1242 | null,
1243 | null,
1244 | null,
1245 | null,
1246 | null,
1247 | null,
1248 | null,
1249 | null,
1250 | null,
1251 | null,
1252 | null,
1253 | null,
1254 | null,
1255 | null,
1256 | null,
1257 | null,
1258 | null,
1259 | null,
1260 | null,
1261 | null,
1262 | null,
1263 | null,
1264 | null,
1265 | null,
1266 | null,
1267 | null,
1268 | null,
1269 | null,
1270 | null,
1271 | null,
1272 | null,
1273 | null,
1274 | null,
1275 | null,
1276 | null,
1277 | null,
1278 | null,
1279 | null,
1280 | null,
1281 | null,
1282 | null,
1283 | null,
1284 | null,
1285 | null,
1286 | null,
1287 | null,
1288 | null,
1289 | null,
1290 | null,
1291 | null,
1292 | null,
1293 | null,
1294 | null,
1295 | null,
1296 | null,
1297 | null,
1298 | null,
1299 | null,
1300 | null,
1301 | null,
1302 | null,
1303 | null,
1304 | null,
1305 | null,
1306 | null,
1307 | null,
1308 | null,
1309 | null,
1310 | null,
1311 | null,
1312 | null,
1313 | null,
1314 | null,
1315 | null,
1316 | null,
1317 | null,
1318 | null,
1319 | null,
1320 | null,
1321 | null,
1322 | null,
1323 | null,
1324 | null,
1325 | null,
1326 | null,
1327 | null,
1328 | null,
1329 | null,
1330 | null,
1331 | null,
1332 | null,
1333 | null,
1334 | null,
1335 | null,
1336 | null,
1337 | null,
1338 | null,
1339 | null,
1340 | null,
1341 | null,
1342 | null,
1343 | null,
1344 | null,
1345 | null,
1346 | null,
1347 | null,
1348 | null,
1349 | null,
1350 | null,
1351 | null,
1352 | null,
1353 | null,
1354 | null,
1355 | null,
1356 | null,
1357 | null,
1358 | null,
1359 | null,
1360 | null,
1361 | null,
1362 | null,
1363 | null,
1364 | null,
1365 | null,
1366 | null,
1367 | null,
1368 | null,
1369 | null,
1370 | null,
1371 | null,
1372 | null,
1373 | null,
1374 | null,
1375 | null,
1376 | null,
1377 | null,
1378 | null,
1379 | null,
1380 | null,
1381 | null,
1382 | null,
1383 | null,
1384 | null,
1385 | null,
1386 | null,
1387 | null,
1388 | null,
1389 | null,
1390 | null,
1391 | null,
1392 | null,
1393 | null,
1394 | null,
1395 | null,
1396 | null,
1397 | null,
1398 | null,
1399 | null,
1400 | null,
1401 | null,
1402 | null,
1403 | null,
1404 | null,
1405 | null,
1406 | null,
1407 | null,
1408 | null,
1409 | null,
1410 | null,
1411 | null,
1412 | null,
1413 | null,
1414 | null,
1415 | null,
1416 | null,
1417 | null,
1418 | null,
1419 | null,
1420 | null,
1421 | null,
1422 | null,
1423 | null,
1424 | null,
1425 | null,
1426 | null,
1427 | null,
1428 | null,
1429 | null,
1430 | null,
1431 | null,
1432 | null,
1433 | null,
1434 | null,
1435 | null,
1436 | null,
1437 | null,
1438 | null,
1439 | null,
1440 | null,
1441 | null,
1442 | null,
1443 | null,
1444 | null,
1445 | null,
1446 | null,
1447 | null,
1448 | null,
1449 | null,
1450 | null,
1451 | null,
1452 | null,
1453 | null,
1454 | null,
1455 | null,
1456 | null,
1457 | null,
1458 | null,
1459 | null,
1460 | null,
1461 | null,
1462 | null,
1463 | null,
1464 | null,
1465 | null,
1466 | null,
1467 | null,
1468 | null,
1469 | null,
1470 | null,
1471 | null,
1472 | null,
1473 | null,
1474 | null,
1475 | null,
1476 | null,
1477 | null,
1478 | null,
1479 | null,
1480 | null,
1481 | null,
1482 | null,
1483 | null,
1484 | null,
1485 | null,
1486 | null,
1487 | null,
1488 | null,
1489 | null,
1490 | null,
1491 | null,
1492 | null,
1493 | null,
1494 | null,
1495 | null,
1496 | null,
1497 | null,
1498 | null,
1499 | null,
1500 | null,
1501 | null,
1502 | null,
1503 | null,
1504 | null,
1505 | null,
1506 | null,
1507 | null,
1508 | null,
1509 | null,
1510 | null,
1511 | null,
1512 | null,
1513 | null,
1514 | null,
1515 | null,
1516 | null,
1517 | null,
1518 | null,
1519 | null,
1520 | null,
1521 | null,
1522 | null,
1523 | null,
1524 | null,
1525 | null,
1526 | null,
1527 | null,
1528 | null,
1529 | null,
1530 | null,
1531 | null,
1532 | null,
1533 | null,
1534 | null,
1535 | null,
1536 | null,
1537 | null,
1538 | null,
1539 | null,
1540 | null,
1541 | null,
1542 | null,
1543 | null,
1544 | null,
1545 | null,
1546 | null,
1547 | null,
1548 | null,
1549 | null,
1550 | null,
1551 | null,
1552 | null,
1553 | null,
1554 | null,
1555 | null,
1556 | null,
1557 | null,
1558 | null,
1559 | null,
1560 | null,
1561 | null,
1562 | null,
1563 | null,
1564 | null,
1565 | null,
1566 | null,
1567 | null,
1568 | null,
1569 | null,
1570 | null,
1571 | null,
1572 | null,
1573 | null,
1574 | null,
1575 | null,
1576 | null,
1577 | null,
1578 | null,
1579 | null,
1580 | null,
1581 | null,
1582 | null,
1583 | null,
1584 | null,
1585 | null,
1586 | null,
1587 | null,
1588 | null,
1589 | null,
1590 | null,
1591 | null,
1592 | null,
1593 | null,
1594 | null,
1595 | null,
1596 | null,
1597 | null,
1598 | null,
1599 | null,
1600 | null,
1601 | null,
1602 | null,
1603 | null,
1604 | null,
1605 | null,
1606 | null,
1607 | null,
1608 | null,
1609 | null,
1610 | null,
1611 | null,
1612 | null,
1613 | null,
1614 | null,
1615 | null,
1616 | null,
1617 | null,
1618 | null,
1619 | null,
1620 | null,
1621 | null,
1622 | null,
1623 | null,
1624 | null,
1625 | null,
1626 | null,
1627 | null,
1628 | null,
1629 | null,
1630 | null,
1631 | null,
1632 | null,
1633 | null,
1634 | null,
1635 | null,
1636 | null,
1637 | null,
1638 | null,
1639 | null,
1640 | null,
1641 | null,
1642 | null,
1643 | null,
1644 | null,
1645 | null,
1646 | null,
1647 | null,
1648 | null,
1649 | null,
1650 | null,
1651 | null,
1652 | null,
1653 | null,
1654 | null,
1655 | null,
1656 | null,
1657 | null,
1658 | null,
1659 | null,
1660 | null,
1661 | null,
1662 | null,
1663 | null,
1664 | null,
1665 | null,
1666 | null,
1667 | null,
1668 | null,
1669 | null,
1670 | null,
1671 | null,
1672 | null,
1673 | null,
1674 | null,
1675 | null,
1676 | null,
1677 | null,
1678 | null,
1679 | null,
1680 | null,
1681 | null,
1682 | null,
1683 | null,
1684 | null,
1685 | null,
1686 | null,
1687 | null,
1688 | null,
1689 | null,
1690 | null,
1691 | null,
1692 | null,
1693 | null,
1694 | null,
1695 | null,
1696 | null,
1697 | null,
1698 | null,
1699 | null,
1700 | null,
1701 | null,
1702 | null,
1703 | null,
1704 | null,
1705 | null,
1706 | null,
1707 | null,
1708 | null,
1709 | null,
1710 | null,
1711 | null,
1712 | null,
1713 | null,
1714 | null,
1715 | null,
1716 | null,
1717 | null,
1718 | null,
1719 | null,
1720 | null,
1721 | null,
1722 | null,
1723 | null,
1724 | null,
1725 | null,
1726 | null,
1727 | null,
1728 | null,
1729 | null,
1730 | null,
1731 | null,
1732 | null,
1733 | null,
1734 | null,
1735 | null,
1736 | null,
1737 | null,
1738 | null,
1739 | null,
1740 | null,
1741 | null,
1742 | null,
1743 | null,
1744 | null,
1745 | null,
1746 | null,
1747 | null,
1748 | null,
1749 | null,
1750 | null,
1751 | null,
1752 | null,
1753 | null,
1754 | null,
1755 | null,
1756 | null,
1757 | null,
1758 | null,
1759 | null,
1760 | null,
1761 | null,
1762 | null,
1763 | null,
1764 | null,
1765 | null,
1766 | null,
1767 | null,
1768 | null,
1769 | null,
1770 | null,
1771 | null,
1772 | null,
1773 | null,
1774 | null,
1775 | null,
1776 | null,
1777 | null,
1778 | null,
1779 | null,
1780 | null,
1781 | null,
1782 | null,
1783 | null,
1784 | null,
1785 | null,
1786 | null,
1787 | null,
1788 | null,
1789 | null,
1790 | null,
1791 | null,
1792 | null,
1793 | null,
1794 | null,
1795 | null,
1796 | null,
1797 | null,
1798 | null,
1799 | null,
1800 | null,
1801 | null,
1802 | null,
1803 | null,
1804 | null,
1805 | null,
1806 | null,
1807 | null,
1808 | null,
1809 | null,
1810 | null,
1811 | null,
1812 | null,
1813 | null,
1814 | null,
1815 | null,
1816 | null,
1817 | null,
1818 | null,
1819 | null,
1820 | null,
1821 | null,
1822 | null,
1823 | null,
1824 | null,
1825 | null,
1826 | null,
1827 | null,
1828 | null,
1829 | null,
1830 | null,
1831 | null,
1832 | null,
1833 | null,
1834 | null,
1835 | null,
1836 | null,
1837 | null,
1838 | null,
1839 | null,
1840 | null,
1841 | null,
1842 | null,
1843 | null,
1844 | null,
1845 | null,
1846 | null,
1847 | null,
1848 | null,
1849 | null,
1850 | null,
1851 | null,
1852 | null,
1853 | null,
1854 | null,
1855 | null,
1856 | null,
1857 | null,
1858 | null,
1859 | null,
1860 | null,
1861 | null,
1862 | null,
1863 | null,
1864 | null,
1865 | null,
1866 | null,
1867 | null,
1868 | null,
1869 | null,
1870 | null,
1871 | null,
1872 | null,
1873 | null,
1874 | null,
1875 | null,
1876 | null,
1877 | null,
1878 | null,
1879 | null,
1880 | null,
1881 | null,
1882 | null,
1883 | null,
1884 | null,
1885 | null,
1886 | null,
1887 | null,
1888 | null,
1889 | null,
1890 | null,
1891 | null,
1892 | null,
1893 | null,
1894 | null,
1895 | null,
1896 | null,
1897 | null,
1898 | null,
1899 | null,
1900 | null,
1901 | null,
1902 | null,
1903 | null,
1904 | null,
1905 | null,
1906 | null,
1907 | null,
1908 | null,
1909 | null,
1910 | null,
1911 | null,
1912 | null,
1913 | null,
1914 | null,
1915 | null,
1916 | null,
1917 | null,
1918 | null,
1919 | null,
1920 | null,
1921 | null,
1922 | null,
1923 | null,
1924 | null,
1925 | null,
1926 | null,
1927 | null,
1928 | null,
1929 | null,
1930 | null,
1931 | null,
1932 | null,
1933 | null,
1934 | null,
1935 | null,
1936 | null,
1937 | null,
1938 | null,
1939 | null,
1940 | null,
1941 | null,
1942 | null,
1943 | null,
1944 | null,
1945 | null,
1946 | null,
1947 | null,
1948 | null,
1949 | null,
1950 | null,
1951 | null,
1952 | null,
1953 | null,
1954 | null,
1955 | null,
1956 | null,
1957 | null,
1958 | null,
1959 | null,
1960 | null,
1961 | null,
1962 | null,
1963 | null,
1964 | null,
1965 | null,
1966 | null,
1967 | null,
1968 | null,
1969 | null,
1970 | null,
1971 | null,
1972 | null,
1973 | null,
1974 | null,
1975 | null,
1976 | null,
1977 | null,
1978 | null,
1979 | null,
1980 | null,
1981 | null,
1982 | null,
1983 | null,
1984 | null,
1985 | null,
1986 | null,
1987 | null,
1988 | null,
1989 | null,
1990 | null,
1991 | null,
1992 | null,
1993 | null,
1994 | null,
1995 | null,
1996 | null,
1997 | null,
1998 | null,
1999 | null,
2000 | null,
2001 | null,
2002 | null,
2003 | null,
2004 | null,
2005 | null,
2006 | null,
2007 | null,
2008 | null,
2009 | null,
2010 | null,
2011 | null,
2012 | null,
2013 | null,
2014 | null,
2015 | null,
2016 | null,
2017 | null,
2018 | null,
2019 | null,
2020 | null,
2021 | null,
2022 | null,
2023 | null,
2024 | null,
2025 | null,
2026 | null,
2027 | null,
2028 | null,
2029 | null,
2030 | null,
2031 | null,
2032 | null,
2033 | null,
2034 | null,
2035 | null,
2036 | null,
2037 | null,
2038 | null,
2039 | null,
2040 | null,
2041 | null,
2042 | null,
2043 | null,
2044 | null,
2045 | null,
2046 | null,
2047 | null,
2048 | null,
2049 | null
2050 | ]
2051 |
--------------------------------------------------------------------------------
/test/performance-tests.coffee:
--------------------------------------------------------------------------------
1 | assertion = require "./assertion"
2 | fs = require "fs"
3 | equals = require "equals"
4 | edn = require "../src/reader"
5 |
6 | testDir = "./test/edn-tests/performance"
7 |
8 | files = fs.readdirSync testDir
9 | files.forEach (file) ->
10 | validEdn = fs.readFileSync "#{testDir}/#{file}", "utf-8"
11 | console.log "Reading #{file}"
12 | start = new Date
13 | try
14 | edn.parse validEdn
15 | stop = new Date
16 | console.log "Elapsed: #{stop.getTime() - start.getTime()}"
17 | catch e
18 | console.log "Error reading #{file}", e
19 |
--------------------------------------------------------------------------------
/test/primitives.coffee:
--------------------------------------------------------------------------------
1 | edn = require "../src/reader"
2 | us = require "underscore"
3 |
4 | {isVal, isNotVal, assert, assertParse, assertNotParse, assertEncode, logTotals} = require "./assertion"
5 |
6 | #nil
7 | # nil represents nil, null or nothing. It should be read as an object with similar meaning on the target platform.
8 |
9 | assertParse "nil should be null",
10 | "nil"
11 | null
12 |
13 | assertParse "nil should not match nilnil",
14 | "nilnil"
15 | isNotVal null
16 |
17 | #booleans
18 | # true and false should be mapped to booleans.
19 |
20 | assertParse "true should be true",
21 | "true"
22 | true
23 |
24 | assertParse "false should be false",
25 | "false"
26 | false
27 |
28 | assertParse "truefalse should not be true",
29 | "truefalse"
30 | isNotVal true
31 |
32 | assertParse "+ by itself is a valid symbol atom",
33 | "+"
34 | edn.sym "+"
35 |
36 | #strings
37 | # "double quotes".
38 | # May span multiple lines.
39 | # Standard C/Java escape characters \t \r \n are supported.
40 |
41 | assertParse 'a "string like this" should be "string like this"',
42 | '"a string like this"',
43 | "a string like this"
44 |
45 | assertParse 'a string "nil" should not be null',
46 | '"nil"'
47 | isNotVal null
48 |
49 |
50 | assertParse 'a string should handle escaped quote chars',
51 | '"this is a string \\"and this should be escaped\\" mid string"'
52 | 'this is a string \"and this should be escaped\" mid string'
53 |
54 |
55 | assertParse 'a string can contain escaped backslash itself',
56 | '"this is a string with \\\\ a backslash escaped"'
57 | 'this is a string with \\ a backslash escaped'
58 |
59 | #characters
60 | # \a \b \c ... \z.
61 | # \newline, \space and \tab yield the corresponding characters.
62 |
63 | assertParse 'basic \\c characters should be string',
64 | '\\c'
65 | edn.char("c", "second arg")
66 |
67 | assertParse '\\tab is a tab',
68 | '\\tab'
69 | edn.char "tab"
70 |
71 | assertParse '\\newline is a newline',
72 | '\\newline'
73 | edn.char "newline"
74 |
75 | assertParse '\\space is a space',
76 | '\\space'
77 | edn.char "space"
78 |
79 | assertParse "can read escaped paren",
80 | "\\)"
81 | edn.char ")"
82 |
83 | #symbols
84 | # begin with a non-numeric character and can
85 | # contain alphanumeric characters and . * + ! - _ ?.
86 | # If - or . are the first character, the second character must be non-numeric.
87 | # Additionally, : # are allowed as constituent characters in symbols but not as the first character.
88 |
89 | assertNotParse "do not allow symbols to start with ~",
90 | "~cat"
91 |
92 | assertNotParse "do not allow symbols to start with @",
93 | "@cat"
94 |
95 | assertNotParse "do not allow non-numeric starting character",
96 | "0xy"
97 |
98 | assertParse "basic symbol 'cat' should be 'cat'",
99 | 'cat'
100 | edn.sym 'cat'
101 |
102 | assertParse "symbol with special characters 'cat*rat-bat'",
103 | 'cat*rat-bat'
104 | edn.sym 'cat*rat-bat'
105 |
106 | assertParse "symbol with colon and hash in middle 'cat:rat#bat'",
107 | 'cat:rat#bat'
108 | edn.sym 'cat:rat#bat'
109 |
110 | assertParse "symbol can start with ?",
111 | "?x"
112 | edn.sym "?x"
113 |
114 | #keywords
115 | # :fred or :my/fred
116 | assertParse "keyword starts with colon :fred is edn.Keyword :fred",
117 | ':fred'
118 | edn.kw ':fred'
119 |
120 | assertParse "keyword can have slash :community/name",
121 | ':community/name'
122 | edn.kw ':community/name'
123 |
124 | #integers
125 | # 0 - 9, optionally prefixed by - to indicate a negative number.
126 | # the suffix N to indicate that arbitrary precision is desired.
127 | assertParse "0 is 0",
128 | '0'
129 | 0
130 |
131 | assertParse "-0 is 0",
132 | "-0"
133 | 0
134 |
135 | assertParse "9923 is 9923",
136 | '9923'
137 | 9923
138 |
139 | assertParse "-9923 is -9923",
140 | '-9923'
141 | -9923
142 |
143 | assertParse "+9923 is 9923",
144 | '+9923'
145 | 9923
146 |
147 | assertParse "N for aritrary precision",
148 | "432N"
149 | 432
150 |
151 | assertParse "Very big ints remain as strings which user can deal with how they please",
152 | "191561942608236107294793378084303638130997321548169216"
153 | edn.bigInt "191561942608236107294793378084303638130997321548169216"
154 |
155 | #floating point numbers
156 | # integers with frac e.g. 12.32
157 | assertParse "12.32 is 12.32",
158 | '12.32'
159 | 12.32
160 |
161 | assertParse "-12.32 is -12.32",
162 | '-12.32'
163 | -12.32
164 |
165 | assertParse "+9923.23 is 9923.23",
166 | "+9923.23"
167 | 9923.23
168 |
169 | assertParse "M suffix on float",
170 | "223.230M"
171 | 223.230
172 |
173 | assertParse "E+ supported for float",
174 | "45.4E+43M"
175 | 4.54e+44
176 |
177 | assertParse "e+ supported for float",
178 | "45.4e+43M"
179 | 4.54e+44
180 |
181 | assertParse "e+ supported for float no decimal",
182 | "45e+43"
183 | 4.5e44
184 |
185 | #lists
186 | # (a b 42)
187 | assertParse "basic list (a b 42) works",
188 | '(a b 42)'
189 | new edn.List [(edn.sym 'a'), (edn.sym 'b'), 42]
190 |
191 | assertParse "nested list (a (b 42 (c d)))",
192 | '(a (b 42 (c d)))'
193 | new edn.List [(edn.sym 'a'), new edn.List [(edn.sym 'b'), 42, new edn.List [(edn.sym 'c'), (edn.sym 'd')]]]
194 |
195 | #vectors
196 | # [a b 42]
197 | assertParse "vector works [a b c]",
198 | '[a b c]'
199 | new edn.Vector [(edn.sym 'a'), (edn.sym 'b'), (edn.sym 'c')]
200 |
201 | #maps
202 | # {:a 1, "foo" :bar, [1 2 3] four}
203 | assertParse "kv pairs in map work {:a 1 :b 2}",
204 | '{:a 1 :b 2}'
205 | new edn.Map [(edn.kw ":a"), 1, (edn.kw ":b"), 2]
206 |
207 | assertParse "anything can be a key",
208 | '{[1 2 3] "some numbers"}'
209 | new edn.Map [(new edn.Vector [1, 2, 3]), "some numbers"]
210 |
211 | assertParse "even a map can be a key",
212 | '{{:name "blue" :type "color"} [ocean sky moon]}'
213 | new edn.Map [(new edn.Map [(edn.kw ":name"), "blue", (edn.kw ":type"), "color"]), new edn.Vector [(edn.sym "ocean"), (edn.sym "sky"), (edn.sym "moon")]]
214 |
215 | #sets
216 | # #{a b [1 2 3]}
217 | assertParse "basic set \#{1 2 3}",
218 | '\#{1 2 3}'
219 | new edn.Set [1, 2, 3]
220 |
221 | assertParse "a set is distinct",
222 | '\#{1 1 2 3}'
223 | 'set not distinct'
224 |
225 | #tagged elements
226 | # #myapp/Person {:first "Fred" :last "Mertz"}
227 | # #inst "1985-04-12T23:20:50.52Z"
228 | assertParse "inst is handled by default",
229 | '#inst "1985-04-12T23:20:50.52Z"'
230 | new Date Date.parse "1985-04-12T23:20:50.52Z"
231 |
232 | # #uuid "f81d4fae-7dec-11d0-a765-00a0c91e6bf6"
233 | assertParse 'basic tags work #myapp/Person {:first "Fred" :last "Mertz"}',
234 | '#myapp/Person {:first "Fred" :last "Mertz"}'
235 | new edn.Tagged (new edn.Tag "myapp", "Person"), new edn.Map [(edn.kw ":first"), "Fred", (edn.kw ":last"), "Mertz"]
236 |
237 | assertParse "unhandled tagged pair works",
238 | '#some/inst "1985-04-12T23:20:50.52Z"'
239 | new edn.Tagged (new edn.Tag "some", "inst"), "1985-04-12T23:20:50.52Z"
240 |
241 | assertParse "tagged elements in a vector",
242 | "[a b #animal/cat rodger c d]"
243 | new edn.Vector [(edn.sym "a"), (edn.sym "b"), (new edn.Tagged (new edn.Tag "animal", "cat"), (edn.sym "rodger")), (edn.sym "c"), (edn.sym "d")]
244 |
245 | edn.setTagAction new edn.Tag("myApp", "Person"), (obj) ->
246 | obj.set (edn.kw ":age"), obj.at(edn.kw ":age") + 100
247 |
248 | assertParse "tag actions are recognized",
249 | "#myApp/Person {:name :walter :age 500}"
250 | new edn.Map [(edn.kw ":name"), (edn.kw ":walter"), (edn.kw ":age"), 600]
251 |
252 | #Comments
253 | #If a ; character is encountered outside of a string, that character
254 | #and all subsequent characters to the next newline should be ignored.
255 | assertParse "there can be comments in a vector",
256 | "[valid vector\n;;comment in vector\nmore vector items]"
257 | new edn.Vector [(edn.sym "valid"), (edn.sym "vector"), (edn.sym "more"), (edn.sym "vector"), (edn.sym "items")]
258 |
259 | assertParse "there can be inline comments",
260 | "[valid ;comment\n more items]"
261 | new edn.Vector [(edn.sym "valid"), (edn.sym "more"), (edn.sym "items")]
262 |
263 | assertParse "whitespace does not affect comments",
264 | "[valid;touching trailing comment\nmore items]"
265 | new edn.Vector [(edn.sym "valid"), (edn.sym "more"), (edn.sym "items")]
266 |
267 | #Discard
268 | #If the sequence #_ is encountered outside of a string, symbol or keyword,
269 | #the next element should be read and discarded. Note that the next element
270 | #must still be a readable element. A reader should not call user-supplied
271 | #tag handlers during the processing of the element to be discarded.
272 | assertParse "discarding item in vector",
273 | "[a b #_ c d]"
274 | new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "d")]
275 |
276 | assertParse "discard an item outside of form",
277 | "#_ a"
278 | ""
279 |
280 | assertParse "discard touches an item",
281 | "[a b #_c d]"
282 | new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "d")]
283 |
284 | assertParse "discard an entire form",
285 | "[a b #_ [a b] c d]"
286 | new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "c"), (edn.sym "d")]
287 |
288 | assertParse "discard with a comment",
289 | "[a #_ ;we are discarding what comes next\n c d]"
290 | new edn.Vector [(edn.sym "a"), (edn.sym "d")]
291 |
292 | #Whitespace
293 | #commas are whitespace
294 | assertParse "no one cares about commas",
295 | "[a ,,,,,, b,,,,,c ,d]"
296 | new edn.Vector [(edn.sym "a"), (edn.sym "b"), (edn.sym "c"), (edn.sym "d")]
297 |
298 | #Map Instances
299 | assertParse "can lookup key",
300 | "{:a 1 :b 2}"
301 | (m) -> m.at(edn.kw ':a') is 1
302 |
303 | assertParse "can lookup by other object",
304 | '{[1 2] "rabbit moon"}'
305 | (m) -> m.at(new edn.Vector [1, 2]) is "rabbit moon"
306 |
307 | #encoding
308 | assertEncode "can encode basic map",
309 | {a: 1, b: 2}
310 | "{\"a\" 1 \"b\" 2}"
311 |
312 | ###
313 | This can not work from a js obj a keys are coerced to strings regardless of your intention
314 | If a user wants numeric keys they need to use an edn.Map directly.
315 | assertEncode "can encode map with numeric keys",
316 | {1: 1, 200: 2}
317 | "{1 1 200 2}"
318 | ###
319 |
320 | assertEncode "can encode a list",
321 | [1, 2, 3]
322 | "[1 2 3]"
323 |
324 | assertEncode "can encode single element list",
325 | [1]
326 | "[1]"
327 |
328 | assertEncode "Can encode nil in hash map",
329 | new edn.Map [edn.kw(":x"), 1, edn.kw(":y"), null]
330 | "{:x 1 :y nil}"
331 |
332 | assertEncode "can encode a nested list",
333 | [1, 2, 3, [4, 5, 6, [7, 8, 9, [10]]]]
334 | "[1 2 3 [4 5 6 [7 8 9 [10]]]]"
335 |
336 | assertEncode "can encode list of strings",
337 | ["a", "b", "c", "words that are strings"]
338 | "[\"a\" \"b\" \"c\" \"words that are strings\"]"
339 |
340 | assertEncode "can encode list of maps",
341 | [{name: "walter", age: 30}, {name: "tony", age: 50, kids: ["a", "b", "c"]}]
342 | "[{\"name\" \"walter\" \"age\" 30} {\"name\" \"tony\" \"age\" 50 \"kids\" [\"a\" \"b\" \"c\"]}]"
343 |
344 | assertEncode "can encode tagged items",
345 | new edn.Tagged(new edn.Tag('myApp', 'Person'), {name: "walter", age: 30})
346 | "#myApp/Person {\"name\" \"walter\" \"age\" 30}"
347 |
348 | assertEncode "can handle string that start with colon",
349 | new edn.Vector [':a', 'b']
350 | "[\":a\" \"b\"]"
351 |
352 | assertParse "can parse and look up nested item",
353 | "{:cat [{:hair :orange}]}"
354 | (r) -> edn.atPath(r, ":cat 0 :hair") is (edn.kw ":orange")
355 |
356 |
357 | assertParse "can handle vector of symbols starting with ?",
358 | "[?x ?y ?z]"
359 | new edn.Vector [edn.sym("?x"), edn.sym("?y"), edn.sym("?z")]
360 |
361 | assertEncode "can handle question marks for keywords",
362 | [(edn.kw ":find"), (edn.sym "?m"), (edn.kw ":where"), [(edn.sym "?m"), (edn.kw ":movie/title")]]
363 | "[:find ?m :where [?m :movie/title]]"
364 |
365 |
366 | assertEncode "can handle bare _ as symbol",
367 | [(edn.sym "_"), (edn.kw ":likes"), (edn.sym "?x")]
368 | "[_ :likes ?x]"
369 |
370 | assertEncode "can handle null",
371 | null
372 | "nil"
373 |
374 | assertParse "reading files works as expected",
375 | edn.encode edn.readFileSync "#{__dirname}/test.edn"
376 | new edn.Map [(edn.kw ":key"), "val", (edn.kw ":key2"), new edn.Vector [1, 2, 3]]
377 |
378 | assertEncode "do not coerce numeric strings into numbers",
379 | {a: "1"}
380 | "{\"a\" \"1\"}"
381 |
382 | assertEncode "encoding stringified json string handles quoting correctly",
383 | edn.encode JSON.stringify a: "1"
384 | '"\\"{\\\\\\"a\\\\\\":\\\\\\"1\\\\\\"}\\""'
385 |
386 | assert "json decoding an encoded json stringifed object...",
387 | (JSON.parse edn.parse edn.encode JSON.stringify a: "1")
388 | a: "1"
389 |
390 | assert "two keywords are eqaul",
391 | (edn.kw ":cat") is (edn.kw ":cat")
392 | true
393 |
394 | assert "toJS works with nil as null",
395 | edn.toJS edn.parse "nil"
396 | null
397 |
398 | assert "vector should handle nil",
399 | edn.toJS edn.parse "[nil nil nil]"
400 | [null, null, null]
401 |
402 | assert "map should handle nil values",
403 | edn.toJS edn.parse "{x nil nil nil}"
404 | do -> x = x: null; x[null] = null; x
405 |
406 |
407 | logTotals()
408 |
--------------------------------------------------------------------------------
/test/test.edn:
--------------------------------------------------------------------------------
1 | {
2 | :key "val"
3 | :key2 [1 2 3]
4 | }
5 |
--------------------------------------------------------------------------------
/test/unify.coffee:
--------------------------------------------------------------------------------
1 | edn = require "../src/reader"
2 |
3 | {assert, logTotals} = require "./assertion"
4 |
5 | assert "make sure unification works",
6 | edn.unify "[?x ?y ?x {?z ?x ?x {?x ?x}}]", x: 1, y: 2, z: 3
7 | edn.parse "[1 2 1 {3 1 1 {1 1}}]"
8 |
9 | assert "make sure keys and values can both be unified",
10 | edn.unify "{?key [?val ?val]}", key: edn.kw(":name"), val: edn.sym("tofu")
11 | edn.parse "{:name [tofu tofu]}"
12 |
13 | assert "unify accepts a Map object for data",
14 | edn.unify (new edn.Map [edn.sym("?key"), edn.sym("?val")]), key: edn.kw(":lunch-food"), val: "carrot"
15 | edn.parse "{:lunch-food \"carrot\"}"
16 |
17 | assert "unify accepts a Map object for values",
18 | edn.unify "{?key [?val ?val]}", edn.parse "{\"key\" :lunch-food \"val\" \"carrot\"}"
19 | edn.parse "{:lunch-food [\"carrot\" \"carrot\"]}"
20 |
21 | assert "unify accepts string for data which gets encoded",
22 | edn.unify "{?key ?val}", "{\"key\" x \"val\" y}"
23 | edn.parse "{x y}"
24 |
25 | assert "unify will lookup symbol and keyword if using Map for data",
26 | edn.unify "{?key [?val {?val ?key}]}", "{key :lunch-food :val [:carrot :tomato :lettuce]}"
27 | edn.parse "{:lunch-food [[:carrot :tomato :lettuce] {[:carrot :tomato :lettuce] :lunch-food}]}"
28 |
29 | assert "unify can handle updating a vector inside of a tagged value",
30 | edn.unify "{:db/id #db/id [:db.part/user ?id] :person/name ?name}", id: -1, name: "franklin"
31 | edn.parse "{:db/id #db/id [:db.part/user -1] :person/name \"franklin\"}"
32 |
33 | logTotals()
34 |
--------------------------------------------------------------------------------