@@ -178,4 +178,71 @@ suite('conversion', () => {
178
178
expect ( duckdb . is_finite_timestamp ( { micros : - ( 2n ** 63n - 1n ) } ) ) . toBe ( false ) ;
179
179
} ) ;
180
180
} ) ;
181
+ suite ( 'hugeint_to_double' , ( ) => {
182
+ test ( 'one' , ( ) => {
183
+ expect ( duckdb . hugeint_to_double ( 1n ) ) . toBe ( 1 ) ;
184
+ } ) ;
185
+ test ( 'zero' , ( ) => {
186
+ expect ( duckdb . hugeint_to_double ( 0n ) ) . toBe ( 0 ) ;
187
+ } ) ;
188
+ test ( 'negative one' , ( ) => {
189
+ expect ( duckdb . hugeint_to_double ( - 1n ) ) . toBe ( - 1 ) ;
190
+ } ) ;
191
+ test ( 'one word' , ( ) => {
192
+ expect ( duckdb . hugeint_to_double ( 2n ** 63n ) ) . toBe ( 9.223372036854776e+18 ) ;
193
+ } ) ;
194
+ test ( 'two words' , ( ) => {
195
+ expect ( duckdb . hugeint_to_double ( 2n ** 65n ) ) . toBe ( 3.6893488147419103e+19 ) ;
196
+ } ) ;
197
+ test ( 'negative one word' , ( ) => {
198
+ expect ( duckdb . hugeint_to_double ( - ( 2n ** 63n ) ) ) . toBe ( - 9.223372036854776e+18 ) ;
199
+ } ) ;
200
+ test ( 'negative two words' , ( ) => {
201
+ expect ( duckdb . hugeint_to_double ( - ( 2n ** 65n ) ) ) . toBe ( - 3.6893488147419103e+19 ) ;
202
+ } ) ;
203
+ test ( 'min' , ( ) => {
204
+ expect ( duckdb . hugeint_to_double ( - ( 2n ** 127n - 1n ) ) ) . toBe ( - 1.7014118346046923e+38 ) ;
205
+ } ) ;
206
+ test ( 'max' , ( ) => {
207
+ expect ( duckdb . hugeint_to_double ( 2n ** 127n - 1n ) ) . toBe ( 1.7014118346046923e+38 ) ;
208
+ } ) ;
209
+ test ( 'near min' , ( ) => {
210
+ expect ( duckdb . hugeint_to_double ( - ( 2n ** 127n - 2n ** 74n ) ) ) . toBe ( - 1.7014118346046922e+38 ) ;
211
+ } ) ;
212
+ test ( 'near max' , ( ) => {
213
+ expect ( duckdb . hugeint_to_double ( 2n ** 127n - 2n ** 74n ) ) . toBe ( 1.7014118346046922e+38 ) ;
214
+ } ) ;
215
+ test ( 'out of range' , ( ) => {
216
+ expect ( ( ) => duckdb . hugeint_to_double ( 2n ** 129n ) ) . toThrowError ( 'bigint out of hugeint range' ) ;
217
+ } ) ;
218
+ } ) ;
219
+ suite ( 'double_to_hugeint' , ( ) => {
220
+ test ( 'one' , ( ) => {
221
+ expect ( duckdb . double_to_hugeint ( 1 ) ) . toBe ( 1n ) ;
222
+ } ) ;
223
+ test ( 'zero' , ( ) => {
224
+ expect ( duckdb . double_to_hugeint ( 0 ) ) . toBe ( 0n ) ;
225
+ } ) ;
226
+ test ( 'negative one' , ( ) => {
227
+ expect ( duckdb . double_to_hugeint ( - 1 ) ) . toBe ( - 1n ) ;
228
+ } ) ;
229
+ test ( 'one word' , ( ) => {
230
+ expect ( duckdb . double_to_hugeint ( 9.223372036854776e+18 ) ) . toBe ( 2n ** 63n ) ;
231
+ } ) ;
232
+ test ( 'two words' , ( ) => {
233
+ expect ( duckdb . double_to_hugeint ( 3.6893488147419103e+19 ) ) . toBe ( 2n ** 65n ) ;
234
+ } ) ;
235
+ test ( 'negative one word' , ( ) => {
236
+ expect ( duckdb . double_to_hugeint ( - 9.223372036854776e+18 ) ) . toBe ( - ( 2n ** 63n ) ) ;
237
+ } ) ;
238
+ test ( 'negative two words' , ( ) => {
239
+ expect ( duckdb . double_to_hugeint ( - 3.6893488147419103e+19 ) ) . toBe ( - ( 2n ** 65n ) ) ;
240
+ } ) ;
241
+ test ( 'near min' , ( ) => {
242
+ expect ( duckdb . double_to_hugeint ( - 1.7014118346046922e+38 ) ) . toBe ( - ( 2n ** 127n - 2n ** 74n ) ) ;
243
+ } ) ;
244
+ test ( 'near max' , ( ) => {
245
+ expect ( duckdb . double_to_hugeint ( 1.7014118346046922e+38 ) ) . toBe ( 2n ** 127n - 2n ** 74n ) ;
246
+ } ) ;
247
+ } ) ;
181
248
} ) ;
0 commit comments