bson 4.1.1 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +106 -7
  3. data/Rakefile +86 -43
  4. data/ext/bson/{native-endian.h → bson-endian.h} +14 -107
  5. data/ext/bson/bson-native.h +135 -0
  6. data/ext/bson/bytebuf.c +133 -0
  7. data/ext/bson/endian.c +117 -0
  8. data/ext/bson/extconf.rb +8 -3
  9. data/ext/bson/init.c +364 -0
  10. data/ext/bson/libbson-utf8.c +230 -0
  11. data/ext/bson/read.c +470 -0
  12. data/ext/bson/util.c +250 -0
  13. data/ext/bson/write.c +675 -0
  14. data/lib/bson/active_support.rb +19 -0
  15. data/lib/bson/array.rb +97 -30
  16. data/lib/bson/big_decimal.rb +77 -0
  17. data/lib/bson/binary.rb +510 -70
  18. data/lib/bson/boolean.rb +15 -4
  19. data/lib/bson/code.rb +25 -12
  20. data/lib/bson/code_with_scope.rb +41 -15
  21. data/lib/bson/config.rb +3 -28
  22. data/lib/bson/date.rb +16 -4
  23. data/lib/bson/date_time.rb +6 -4
  24. data/lib/bson/db_pointer.rb +110 -0
  25. data/lib/bson/dbref.rb +154 -0
  26. data/lib/bson/decimal128/builder.rb +456 -0
  27. data/lib/bson/decimal128.rb +272 -0
  28. data/lib/bson/document.rb +177 -7
  29. data/lib/bson/environment.rb +17 -2
  30. data/lib/bson/error/bson_decode_error.rb +11 -0
  31. data/lib/bson/error/ext_json_parse_error.rb +11 -0
  32. data/lib/bson/error/illegal_key.rb +23 -0
  33. data/lib/bson/error/invalid_binary_type.rb +37 -0
  34. data/lib/bson/error/invalid_dbref_argument.rb +12 -0
  35. data/lib/bson/error/invalid_decimal128_argument.rb +25 -0
  36. data/lib/bson/error/invalid_decimal128_range.rb +27 -0
  37. data/lib/bson/error/invalid_decimal128_string.rb +26 -0
  38. data/lib/bson/error/invalid_key.rb +24 -0
  39. data/lib/bson/error/invalid_object_id.rb +11 -0
  40. data/lib/bson/error/invalid_regexp_pattern.rb +13 -0
  41. data/lib/bson/error/unrepresentable_precision.rb +19 -0
  42. data/lib/bson/error/unserializable_class.rb +13 -0
  43. data/lib/bson/error/unsupported_binary_subtype.rb +12 -0
  44. data/lib/bson/error/unsupported_type.rb +11 -0
  45. data/lib/bson/error.rb +22 -0
  46. data/lib/bson/ext_json.rb +389 -0
  47. data/lib/bson/false_class.rb +6 -4
  48. data/lib/bson/float.rb +43 -7
  49. data/lib/bson/hash.rb +152 -37
  50. data/lib/bson/int32.rb +104 -6
  51. data/lib/bson/int64.rb +111 -8
  52. data/lib/bson/integer.rb +43 -9
  53. data/lib/bson/json.rb +3 -1
  54. data/lib/bson/max_key.rb +21 -10
  55. data/lib/bson/min_key.rb +21 -10
  56. data/lib/bson/nil_class.rb +7 -3
  57. data/lib/bson/object.rb +25 -17
  58. data/lib/bson/object_id.rb +98 -113
  59. data/lib/bson/open_struct.rb +59 -0
  60. data/lib/bson/regexp.rb +129 -56
  61. data/lib/bson/registry.rb +7 -10
  62. data/lib/bson/specialized.rb +8 -4
  63. data/lib/bson/string.rb +12 -32
  64. data/lib/bson/symbol.rb +107 -11
  65. data/lib/bson/time.rb +68 -7
  66. data/lib/bson/time_with_zone.rb +67 -0
  67. data/lib/bson/timestamp.rb +50 -10
  68. data/lib/bson/true_class.rb +6 -4
  69. data/lib/bson/undefined.rb +28 -2
  70. data/lib/bson/vector.rb +44 -0
  71. data/lib/bson/version.rb +6 -14
  72. data/lib/bson.rb +22 -12
  73. data/spec/README.md +14 -0
  74. data/spec/bson/array_spec.rb +38 -62
  75. data/spec/bson/big_decimal_spec.rb +328 -0
  76. data/spec/bson/binary_spec.rb +199 -53
  77. data/spec/bson/binary_uuid_spec.rb +190 -0
  78. data/spec/bson/boolean_spec.rb +2 -1
  79. data/spec/bson/byte_buffer_read_spec.rb +198 -0
  80. data/spec/bson/byte_buffer_spec.rb +122 -381
  81. data/spec/bson/byte_buffer_write_spec.rb +855 -0
  82. data/spec/bson/code_spec.rb +6 -4
  83. data/spec/bson/code_with_scope_spec.rb +6 -4
  84. data/spec/bson/config_spec.rb +1 -35
  85. data/spec/bson/date_spec.rb +2 -1
  86. data/spec/bson/date_time_spec.rb +55 -1
  87. data/spec/bson/dbref_legacy_spec.rb +186 -0
  88. data/spec/bson/dbref_spec.rb +487 -0
  89. data/spec/bson/decimal128_spec.rb +1840 -0
  90. data/spec/bson/document_as_spec.rb +61 -0
  91. data/spec/bson/document_spec.rb +205 -32
  92. data/spec/bson/ext_json_parse_spec.rb +346 -0
  93. data/spec/bson/false_class_spec.rb +9 -1
  94. data/spec/bson/float_spec.rb +42 -1
  95. data/spec/bson/hash_as_spec.rb +58 -0
  96. data/spec/bson/hash_spec.rb +318 -66
  97. data/spec/bson/int32_spec.rb +248 -1
  98. data/spec/bson/int64_spec.rb +308 -1
  99. data/spec/bson/integer_spec.rb +61 -3
  100. data/spec/bson/json_spec.rb +2 -1
  101. data/spec/bson/max_key_spec.rb +6 -4
  102. data/spec/bson/min_key_spec.rb +6 -4
  103. data/spec/bson/nil_class_spec.rb +2 -1
  104. data/spec/bson/object_id_spec.rb +95 -5
  105. data/spec/bson/object_spec.rb +3 -2
  106. data/spec/bson/open_struct_spec.rb +87 -0
  107. data/spec/bson/raw_spec.rb +594 -0
  108. data/spec/bson/regexp_spec.rb +61 -8
  109. data/spec/bson/registry_spec.rb +3 -2
  110. data/spec/bson/string_spec.rb +26 -33
  111. data/spec/bson/symbol_raw_spec.rb +70 -0
  112. data/spec/bson/symbol_spec.rb +77 -20
  113. data/spec/bson/time_spec.rb +206 -2
  114. data/spec/bson/time_with_zone_spec.rb +69 -0
  115. data/spec/bson/timestamp_spec.rb +58 -2
  116. data/spec/bson/true_class_spec.rb +9 -1
  117. data/spec/bson/undefined_spec.rb +28 -1
  118. data/spec/bson/vector_spec.rb +33 -0
  119. data/spec/bson_spec.rb +2 -1
  120. data/spec/runners/binary_vector.rb +78 -0
  121. data/spec/runners/common_driver.rb +348 -0
  122. data/spec/runners/corpus.rb +191 -0
  123. data/spec/runners/corpus_legacy.rb +248 -0
  124. data/spec/shared/LICENSE +20 -0
  125. data/spec/shared/bin/get-mongodb-download-url +17 -0
  126. data/spec/shared/bin/s3-copy +45 -0
  127. data/spec/shared/bin/s3-upload +69 -0
  128. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  129. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  130. data/spec/shared/lib/mrss/constraints.rb +378 -0
  131. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  132. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  133. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  134. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  135. data/spec/shared/lib/mrss/release/candidate.rb +281 -0
  136. data/spec/shared/lib/mrss/release/product_data.rb +144 -0
  137. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  138. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  139. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  140. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  141. data/spec/shared/lib/mrss/utils.rb +37 -0
  142. data/spec/shared/lib/tasks/candidate.rake +64 -0
  143. data/spec/shared/share/Dockerfile.erb +251 -0
  144. data/spec/shared/share/haproxy-1.conf +16 -0
  145. data/spec/shared/share/haproxy-2.conf +17 -0
  146. data/spec/shared/shlib/config.sh +27 -0
  147. data/spec/shared/shlib/distro.sh +84 -0
  148. data/spec/shared/shlib/server.sh +423 -0
  149. data/spec/shared/shlib/set_env.sh +110 -0
  150. data/spec/spec_helper.rb +61 -1
  151. data/spec/spec_tests/binary_vector_spec.rb +82 -0
  152. data/spec/spec_tests/common_driver_spec.rb +84 -0
  153. data/spec/spec_tests/corpus_legacy_spec.rb +72 -0
  154. data/spec/spec_tests/corpus_spec.rb +134 -0
  155. data/spec/spec_tests/data/binary_vector/README.md +61 -0
  156. data/spec/spec_tests/data/binary_vector/float32.json +65 -0
  157. data/spec/spec_tests/data/binary_vector/int8.json +57 -0
  158. data/spec/spec_tests/data/binary_vector/packed_bit.json +83 -0
  159. data/spec/spec_tests/data/corpus/README.md +15 -0
  160. data/spec/spec_tests/data/corpus/array.json +49 -0
  161. data/spec/spec_tests/data/corpus/binary.json +153 -0
  162. data/spec/spec_tests/data/corpus/boolean.json +27 -0
  163. data/spec/spec_tests/data/corpus/code.json +67 -0
  164. data/spec/spec_tests/data/corpus/code_w_scope.json +78 -0
  165. data/spec/spec_tests/data/corpus/datetime.json +42 -0
  166. data/spec/spec_tests/data/corpus/dbpointer.json +56 -0
  167. data/spec/spec_tests/data/corpus/dbref.json +51 -0
  168. data/spec/spec_tests/data/corpus/decimal128-1.json +317 -0
  169. data/spec/spec_tests/data/corpus/decimal128-2.json +793 -0
  170. data/spec/spec_tests/data/corpus/decimal128-3.json +1771 -0
  171. data/spec/spec_tests/data/corpus/decimal128-4.json +165 -0
  172. data/spec/spec_tests/data/corpus/decimal128-5.json +402 -0
  173. data/spec/spec_tests/data/corpus/decimal128-6.json +131 -0
  174. data/spec/spec_tests/data/corpus/decimal128-7.json +327 -0
  175. data/spec/spec_tests/data/corpus/document.json +60 -0
  176. data/spec/spec_tests/data/corpus/double.json +87 -0
  177. data/spec/spec_tests/data/corpus/int32.json +43 -0
  178. data/spec/spec_tests/data/corpus/int64.json +43 -0
  179. data/spec/spec_tests/data/corpus/maxkey.json +12 -0
  180. data/spec/spec_tests/data/corpus/minkey.json +12 -0
  181. data/spec/spec_tests/data/corpus/multi-type-deprecated.json +15 -0
  182. data/spec/spec_tests/data/corpus/multi-type.json +11 -0
  183. data/spec/spec_tests/data/corpus/null.json +12 -0
  184. data/spec/spec_tests/data/corpus/oid.json +28 -0
  185. data/spec/spec_tests/data/corpus/regex.json +65 -0
  186. data/spec/spec_tests/data/corpus/string.json +72 -0
  187. data/spec/spec_tests/data/corpus/symbol.json +80 -0
  188. data/spec/spec_tests/data/corpus/timestamp.json +34 -0
  189. data/spec/spec_tests/data/corpus/top.json +262 -0
  190. data/spec/spec_tests/data/corpus/undefined.json +15 -0
  191. data/spec/spec_tests/data/corpus_legacy/array.json +49 -0
  192. data/spec/spec_tests/data/corpus_legacy/binary.json +69 -0
  193. data/spec/spec_tests/data/corpus_legacy/boolean.json +27 -0
  194. data/spec/spec_tests/data/corpus_legacy/code.json +67 -0
  195. data/spec/spec_tests/data/corpus_legacy/code_w_scope.json +78 -0
  196. data/spec/spec_tests/data/corpus_legacy/document.json +36 -0
  197. data/spec/spec_tests/data/corpus_legacy/double.json +69 -0
  198. data/spec/spec_tests/data/corpus_legacy/failures/datetime.json +31 -0
  199. data/spec/spec_tests/data/corpus_legacy/failures/dbpointer.json +42 -0
  200. data/spec/spec_tests/data/corpus_legacy/failures/int64.json +38 -0
  201. data/spec/spec_tests/data/corpus_legacy/failures/symbol.json +62 -0
  202. data/spec/spec_tests/data/corpus_legacy/int32.json +38 -0
  203. data/spec/spec_tests/data/corpus_legacy/maxkey.json +12 -0
  204. data/spec/spec_tests/data/corpus_legacy/minkey.json +12 -0
  205. data/spec/spec_tests/data/corpus_legacy/null.json +12 -0
  206. data/spec/spec_tests/data/corpus_legacy/oid.json +28 -0
  207. data/spec/spec_tests/data/corpus_legacy/regex.json +37 -0
  208. data/spec/spec_tests/data/corpus_legacy/string.json +67 -0
  209. data/spec/spec_tests/data/corpus_legacy/timestamp.json +18 -0
  210. data/spec/spec_tests/data/corpus_legacy/top.json +62 -0
  211. data/spec/spec_tests/data/corpus_legacy/undefined.json +13 -0
  212. data/spec/spec_tests/data/decimal128/decimal128-1.json +363 -0
  213. data/spec/spec_tests/data/decimal128/decimal128-2.json +793 -0
  214. data/spec/spec_tests/data/decimal128/decimal128-3.json +1771 -0
  215. data/spec/spec_tests/data/decimal128/decimal128-4.json +165 -0
  216. data/spec/spec_tests/data/decimal128/decimal128-5.json +402 -0
  217. data/spec/spec_tests/data/decimal128/decimal128-6.json +131 -0
  218. data/spec/spec_tests/data/decimal128/decimal128-7.json +327 -0
  219. data/spec/support/shared_examples.rb +32 -11
  220. data/spec/support/spec_config.rb +17 -0
  221. data/spec/support/utils.rb +58 -0
  222. metadata +284 -45
  223. checksums.yaml.gz.sig +0 -3
  224. data/ext/bson/native.c +0 -722
  225. data.tar.gz.sig +0 -0
  226. metadata.gz.sig +0 -0
@@ -0,0 +1,317 @@
1
+ {
2
+ "description": "Decimal128",
3
+ "bson_type": "0x13",
4
+ "test_key": "d",
5
+ "valid": [
6
+ {
7
+ "description": "Special - Canonical NaN",
8
+ "canonical_bson": "180000001364000000000000000000000000000000007C00",
9
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}"
10
+ },
11
+ {
12
+ "description": "Special - Negative NaN",
13
+ "canonical_bson": "18000000136400000000000000000000000000000000FC00",
14
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}",
15
+ "lossy": true
16
+ },
17
+ {
18
+ "description": "Special - Negative NaN",
19
+ "canonical_bson": "18000000136400000000000000000000000000000000FC00",
20
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}",
21
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-NaN\"}}",
22
+ "lossy": true
23
+ },
24
+ {
25
+ "description": "Special - Canonical SNaN",
26
+ "canonical_bson": "180000001364000000000000000000000000000000007E00",
27
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}",
28
+ "lossy": true
29
+ },
30
+ {
31
+ "description": "Special - Negative SNaN",
32
+ "canonical_bson": "18000000136400000000000000000000000000000000FE00",
33
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}",
34
+ "lossy": true
35
+ },
36
+ {
37
+ "description": "Special - NaN with a payload",
38
+ "canonical_bson": "180000001364001200000000000000000000000000007E00",
39
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}",
40
+ "lossy": true
41
+ },
42
+ {
43
+ "description": "Special - Canonical Positive Infinity",
44
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
45
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
46
+ },
47
+ {
48
+ "description": "Special - Canonical Negative Infinity",
49
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
50
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
51
+ },
52
+ {
53
+ "description": "Special - Invalid representation treated as 0",
54
+ "canonical_bson": "180000001364000000000000000000000000000000106C00",
55
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}",
56
+ "lossy": true
57
+ },
58
+ {
59
+ "description": "Special - Invalid representation treated as -0",
60
+ "canonical_bson": "18000000136400DCBA9876543210DEADBEEF00000010EC00",
61
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}",
62
+ "lossy": true
63
+ },
64
+ {
65
+ "description": "Special - Invalid representation treated as 0E3",
66
+ "canonical_bson": "18000000136400FFFFFFFFFFFFFFFFFFFFFFFFFFFF116C00",
67
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+3\"}}",
68
+ "lossy": true
69
+ },
70
+ {
71
+ "description": "Regular - Adjusted Exponent Limit",
72
+ "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CF22F00",
73
+ "canonical_extjson": "{\"d\": { \"$numberDecimal\": \"0.000001234567890123456789012345678901234\" }}"
74
+ },
75
+ {
76
+ "description": "Regular - Smallest",
77
+ "canonical_bson": "18000000136400D204000000000000000000000000343000",
78
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.001234\"}}"
79
+ },
80
+ {
81
+ "description": "Regular - Smallest with Trailing Zeros",
82
+ "canonical_bson": "1800000013640040EF5A07000000000000000000002A3000",
83
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.00123400000\"}}"
84
+ },
85
+ {
86
+ "description": "Regular - 0.1",
87
+ "canonical_bson": "1800000013640001000000000000000000000000003E3000",
88
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1\"}}"
89
+ },
90
+ {
91
+ "description": "Regular - 0.1234567890123456789012345678901234",
92
+ "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CFC2F00",
93
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0.1234567890123456789012345678901234\"}}"
94
+ },
95
+ {
96
+ "description": "Regular - 0",
97
+ "canonical_bson": "180000001364000000000000000000000000000000403000",
98
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0\"}}"
99
+ },
100
+ {
101
+ "description": "Regular - -0",
102
+ "canonical_bson": "18000000136400000000000000000000000000000040B000",
103
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0\"}}"
104
+ },
105
+ {
106
+ "description": "Regular - -0.0",
107
+ "canonical_bson": "1800000013640000000000000000000000000000003EB000",
108
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-0.0\"}}"
109
+ },
110
+ {
111
+ "description": "Regular - 2",
112
+ "canonical_bson": "180000001364000200000000000000000000000000403000",
113
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2\"}}"
114
+ },
115
+ {
116
+ "description": "Regular - 2.000",
117
+ "canonical_bson": "18000000136400D0070000000000000000000000003A3000",
118
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"2.000\"}}"
119
+ },
120
+ {
121
+ "description": "Regular - Largest",
122
+ "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C403000",
123
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234567890123456789012345678901234\"}}"
124
+ },
125
+ {
126
+ "description": "Scientific - Tiniest",
127
+ "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09ED010000",
128
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.999999999999999999999999999999999E-6143\"}}"
129
+ },
130
+ {
131
+ "description": "Scientific - Tiny",
132
+ "canonical_bson": "180000001364000100000000000000000000000000000000",
133
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}"
134
+ },
135
+ {
136
+ "description": "Scientific - Negative Tiny",
137
+ "canonical_bson": "180000001364000100000000000000000000000000008000",
138
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1E-6176\"}}"
139
+ },
140
+ {
141
+ "description": "Scientific - Adjusted Exponent Limit",
142
+ "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3CF02F00",
143
+ "canonical_extjson": "{\"d\": { \"$numberDecimal\": \"1.234567890123456789012345678901234E-7\" }}"
144
+ },
145
+ {
146
+ "description": "Scientific - Fractional",
147
+ "canonical_bson": "1800000013640064000000000000000000000000002CB000",
148
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00E-8\"}}"
149
+ },
150
+ {
151
+ "description": "Scientific - 0 with Exponent",
152
+ "canonical_bson": "180000001364000000000000000000000000000000205F00",
153
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E+6000\"}}"
154
+ },
155
+ {
156
+ "description": "Scientific - 0 with Negative Exponent",
157
+ "canonical_bson": "1800000013640000000000000000000000000000007A2B00",
158
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"0E-611\"}}"
159
+ },
160
+ {
161
+ "description": "Scientific - No Decimal with Signed Exponent",
162
+ "canonical_bson": "180000001364000100000000000000000000000000463000",
163
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}"
164
+ },
165
+ {
166
+ "description": "Scientific - Trailing Zero",
167
+ "canonical_bson": "180000001364001A04000000000000000000000000423000",
168
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.050E+4\"}}"
169
+ },
170
+ {
171
+ "description": "Scientific - With Decimal",
172
+ "canonical_bson": "180000001364006900000000000000000000000000423000",
173
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.05E+3\"}}"
174
+ },
175
+ {
176
+ "description": "Scientific - Full",
177
+ "canonical_bson": "18000000136400FFFFFFFFFFFFFFFFFFFFFFFFFFFF403000",
178
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"5192296858534827628530496329220095\"}}"
179
+ },
180
+ {
181
+ "description": "Scientific - Large",
182
+ "canonical_bson": "18000000136400000000000A5BC138938D44C64D31FE5F00",
183
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+6144\"}}"
184
+ },
185
+ {
186
+ "description": "Scientific - Largest",
187
+ "canonical_bson": "18000000136400FFFFFFFF638E8D37C087ADBE09EDFF5F00",
188
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"9.999999999999999999999999999999999E+6144\"}}"
189
+ },
190
+ {
191
+ "description": "Non-Canonical Parsing - Exponent Normalization",
192
+ "canonical_bson": "1800000013640064000000000000000000000000002CB000",
193
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-100E-10\"}}",
194
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-1.00E-8\"}}"
195
+ },
196
+ {
197
+ "description": "Non-Canonical Parsing - Unsigned Positive Exponent",
198
+ "canonical_bson": "180000001364000100000000000000000000000000463000",
199
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E3\"}}",
200
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}"
201
+ },
202
+ {
203
+ "description": "Non-Canonical Parsing - Lowercase Exponent Identifier",
204
+ "canonical_bson": "180000001364000100000000000000000000000000463000",
205
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1e+3\"}}",
206
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E+3\"}}"
207
+ },
208
+ {
209
+ "description": "Non-Canonical Parsing - Long Significand with Exponent",
210
+ "canonical_bson": "1800000013640079D9E0F9763ADA429D0200000000583000",
211
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"12345689012345789012345E+12\"}}",
212
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.2345689012345789012345E+34\"}}"
213
+ },
214
+ {
215
+ "description": "Non-Canonical Parsing - Positive Sign",
216
+ "canonical_bson": "18000000136400F2AF967ED05C82DE3297FF6FDE3C403000",
217
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+1234567890123456789012345678901234\"}}",
218
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1234567890123456789012345678901234\"}}"
219
+ },
220
+ {
221
+ "description": "Non-Canonical Parsing - Long Decimal String",
222
+ "canonical_bson": "180000001364000100000000000000000000000000722800",
223
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \".000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\"}}",
224
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-999\"}}"
225
+ },
226
+ {
227
+ "description": "Non-Canonical Parsing - nan",
228
+ "canonical_bson": "180000001364000000000000000000000000000000007C00",
229
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"nan\"}}",
230
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}"
231
+ },
232
+ {
233
+ "description": "Non-Canonical Parsing - nAn",
234
+ "canonical_bson": "180000001364000000000000000000000000000000007C00",
235
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"nAn\"}}",
236
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"NaN\"}}"
237
+ },
238
+ {
239
+ "description": "Non-Canonical Parsing - +infinity",
240
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
241
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"+infinity\"}}",
242
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
243
+ },
244
+ {
245
+ "description": "Non-Canonical Parsing - infinity",
246
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
247
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"infinity\"}}",
248
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
249
+ },
250
+ {
251
+ "description": "Non-Canonical Parsing - infiniTY",
252
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
253
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"infiniTY\"}}",
254
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
255
+ },
256
+ {
257
+ "description": "Non-Canonical Parsing - inf",
258
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
259
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"inf\"}}",
260
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
261
+ },
262
+ {
263
+ "description": "Non-Canonical Parsing - inF",
264
+ "canonical_bson": "180000001364000000000000000000000000000000007800",
265
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"inF\"}}",
266
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"Infinity\"}}"
267
+ },
268
+ {
269
+ "description": "Non-Canonical Parsing - -infinity",
270
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
271
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-infinity\"}}",
272
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
273
+ },
274
+ {
275
+ "description": "Non-Canonical Parsing - -infiniTy",
276
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
277
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-infiniTy\"}}",
278
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
279
+ },
280
+ {
281
+ "description": "Non-Canonical Parsing - -Inf",
282
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
283
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}",
284
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
285
+ },
286
+ {
287
+ "description": "Non-Canonical Parsing - -inf",
288
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
289
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-inf\"}}",
290
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
291
+ },
292
+ {
293
+ "description": "Non-Canonical Parsing - -inF",
294
+ "canonical_bson": "18000000136400000000000000000000000000000000F800",
295
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"-inF\"}}",
296
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"-Infinity\"}}"
297
+ },
298
+ {
299
+ "description": "Rounded Subnormal number",
300
+ "canonical_bson": "180000001364000100000000000000000000000000000000",
301
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"10E-6177\"}}",
302
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E-6176\"}}"
303
+ },
304
+ {
305
+ "description": "Clamped",
306
+ "canonical_bson": "180000001364000a00000000000000000000000000fe5f00",
307
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1E6112\"}}",
308
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.0E+6112\"}}"
309
+ },
310
+ {
311
+ "description": "Exact rounding",
312
+ "canonical_bson": "18000000136400000000000a5bc138938d44c64d31cc3700",
313
+ "degenerate_extjson": "{\"d\" : {\"$numberDecimal\" : \"1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}",
314
+ "canonical_extjson": "{\"d\" : {\"$numberDecimal\" : \"1.000000000000000000000000000000000E+999\"}}"
315
+ }
316
+ ]
317
+ }