2 * Another place to find bugs that may yet plague us. This time with writing out
3 * floats to arrays. We are lazy and did basically just take the opposite of our
4 * test code to read in values.
7 var mod_ctype = require('../../../ctio.js');
8 var ASSERT = require('assert');
12 * A useful thing to keep around for debugging
13 * console.log('buffer[0]: ' + buffer[0].toString(16));
14 * console.log('buffer[1]: ' + buffer[1].toString(16));
15 * console.log('buffer[2]: ' + buffer[2].toString(16));
16 * console.log('buffer[3]: ' + buffer[3].toString(16));
17 * console.log('buffer[4]: ' + buffer[4].toString(16));
18 * console.log('buffer[5]: ' + buffer[5].toString(16));
19 * console.log('buffer[6]: ' + buffer[6].toString(16));
20 * console.log('buffer[7]: ' + buffer[7].toString(16));
25 var buffer = new Buffer(4);
26 mod_ctype.wfloat(0, 'big', buffer, 0);
27 /* Start off with some of the easy ones: +zero */
28 ASSERT.equal(0, buffer[0]);
29 ASSERT.equal(0, buffer[1]);
30 ASSERT.equal(0, buffer[2]);
31 ASSERT.equal(0, buffer[3]);
32 mod_ctype.wfloat(0, 'little', buffer, 0);
33 ASSERT.equal(0, buffer[0]);
34 ASSERT.equal(0, buffer[1]);
35 ASSERT.equal(0, buffer[2]);
36 ASSERT.equal(0, buffer[3]);
39 mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'big', buffer, 0);
40 ASSERT.equal(0x7f, buffer[0]);
41 ASSERT.equal(0x80, buffer[1]);
42 ASSERT.equal(0x00, buffer[2]);
43 ASSERT.equal(0x00, buffer[3]);
44 mod_ctype.wfloat(Number.POSITIVE_INFINITY, 'little', buffer, 0);
45 ASSERT.equal(0x7f, buffer[3]);
46 ASSERT.equal(0x80, buffer[2]);
47 ASSERT.equal(0x00, buffer[1]);
48 ASSERT.equal(0x00, buffer[0]);
51 mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'big', buffer, 0);
52 ASSERT.equal(0xff, buffer[0]);
53 ASSERT.equal(0x80, buffer[1]);
54 ASSERT.equal(0x00, buffer[2]);
55 ASSERT.equal(0x00, buffer[3]);
56 mod_ctype.wfloat(Number.NEGATIVE_INFINITY, 'little', buffer, 0);
57 ASSERT.equal(0xff, buffer[3]);
58 ASSERT.equal(0x80, buffer[2]);
59 ASSERT.equal(0x00, buffer[1]);
60 ASSERT.equal(0x00, buffer[0]);
65 * NaN Is a litle weird in its requirements, so we're going to encode a
66 * bit of how we actually implement it into this test. Probably not the
67 * best, since technically the sign is a don't care and the mantissa
68 * needs to just be non-zero.
70 mod_ctype.wfloat(NaN, 'big', buffer, 0);
71 ASSERT.equal(0x7f, buffer[0]);
72 ASSERT.equal(0x80, buffer[1]);
73 ASSERT.equal(0x00, buffer[2]);
74 ASSERT.equal(0x17, buffer[3]);
75 mod_ctype.wfloat(NaN, 'little', buffer, 0);
76 ASSERT.equal(0x7f, buffer[3]);
77 ASSERT.equal(0x80, buffer[2]);
78 ASSERT.equal(0x00, buffer[1]);
79 ASSERT.equal(0x17, buffer[0]);
81 /* On to some basic tests */
83 mod_ctype.wfloat(1.125, 'big', buffer, 0);
84 ASSERT.equal(0x3f, buffer[0]);
85 ASSERT.equal(0x90, buffer[1]);
86 ASSERT.equal(0x00, buffer[2]);
87 ASSERT.equal(0x00, buffer[3]);
88 mod_ctype.wfloat(1.125, 'little', buffer, 0);
89 ASSERT.equal(0x3f, buffer[3]);
90 ASSERT.equal(0x90, buffer[2]);
91 ASSERT.equal(0x00, buffer[1]);
92 ASSERT.equal(0x00, buffer[0]);
94 mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0);
95 ASSERT.equal(0x3f, buffer[0]);
96 ASSERT.equal(0x80, buffer[1]);
97 ASSERT.equal(0x00, buffer[2]);
98 ASSERT.equal(0x01, buffer[3]);
99 mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0);
100 ASSERT.equal(0x3f, buffer[3]);
101 ASSERT.equal(0x80, buffer[2]);
102 ASSERT.equal(0x00, buffer[1]);
103 ASSERT.equal(0x01, buffer[0]);
105 mod_ctype.wfloat(1.0000001192092896, 'big', buffer, 0);
106 ASSERT.equal(0x3f, buffer[0]);
107 ASSERT.equal(0x80, buffer[1]);
108 ASSERT.equal(0x00, buffer[2]);
109 ASSERT.equal(0x01, buffer[3]);
110 mod_ctype.wfloat(1.0000001192092896, 'little', buffer, 0);
111 ASSERT.equal(0x3f, buffer[3]);
112 ASSERT.equal(0x80, buffer[2]);
113 ASSERT.equal(0x00, buffer[1]);
114 ASSERT.equal(0x01, buffer[0]);
116 mod_ctype.wfloat(2.3283067140944524e-10, 'big', buffer, 0);
117 ASSERT.equal(0x2f, buffer[0]);
118 ASSERT.equal(0x80, buffer[1]);
119 ASSERT.equal(0x00, buffer[2]);
120 ASSERT.equal(0x01, buffer[3]);
121 mod_ctype.wfloat(2.3283067140944524e-10, 'little', buffer, 0);
122 ASSERT.equal(0x2f, buffer[3]);
123 ASSERT.equal(0x80, buffer[2]);
124 ASSERT.equal(0x00, buffer[1]);
125 ASSERT.equal(0x01, buffer[0]);
127 /* ff34a2b0 -2.4010576103645774e+38 */
128 mod_ctype.wfloat(-2.4010576103645774e+38,
130 ASSERT.equal(0xff, buffer[0]);
131 ASSERT.equal(0x34, buffer[1]);
132 ASSERT.equal(0xa2, buffer[2]);
133 ASSERT.equal(0xb0, buffer[3]);
134 mod_ctype.wfloat(-2.4010576103645774e+38,
135 'little', buffer, 0);
136 ASSERT.equal(0xff, buffer[3]);
137 ASSERT.equal(0x34, buffer[2]);
138 ASSERT.equal(0xa2, buffer[1]);
139 ASSERT.equal(0xb0, buffer[0]);
141 /* Denormalized tests */
143 /* 0003f89a +/- 3.6468792534053364e-40 */
144 mod_ctype.wfloat(3.6468792534053364e-40,
146 ASSERT.equal(0x00, buffer[0]);
147 ASSERT.equal(0x03, buffer[1]);
148 ASSERT.equal(0xf8, buffer[2]);
149 ASSERT.equal(0x9a, buffer[3]);
150 mod_ctype.wfloat(3.6468792534053364e-40,
151 'little', buffer, 0);
152 ASSERT.equal(0x00, buffer[3]);
153 ASSERT.equal(0x03, buffer[2]);
154 ASSERT.equal(0xf8, buffer[1]);
155 ASSERT.equal(0x9a, buffer[0]);
157 mod_ctype.wfloat(-3.6468792534053364e-40,
159 ASSERT.equal(0x80, buffer[0]);
160 ASSERT.equal(0x03, buffer[1]);
161 ASSERT.equal(0xf8, buffer[2]);
162 ASSERT.equal(0x9a, buffer[3]);
163 mod_ctype.wfloat(-3.6468792534053364e-40,
164 'little', buffer, 0);
165 ASSERT.equal(0x80, buffer[3]);
166 ASSERT.equal(0x03, buffer[2]);
167 ASSERT.equal(0xf8, buffer[1]);
168 ASSERT.equal(0x9a, buffer[0]);
170 /* Maximum and minimum normalized and denormalized values */
172 /* Largest normalized number +/- 3.4028234663852886e+38 */
174 mod_ctype.wfloat(3.4028234663852886e+38,
176 ASSERT.equal(0x7f, buffer[0]);
177 ASSERT.equal(0x7f, buffer[1]);
178 ASSERT.equal(0xff, buffer[2]);
179 ASSERT.equal(0xff, buffer[3]);
180 mod_ctype.wfloat(3.4028234663852886e+38,
181 'little', buffer, 0);
182 ASSERT.equal(0x7f, buffer[3]);
183 ASSERT.equal(0x7f, buffer[2]);
184 ASSERT.equal(0xff, buffer[1]);
185 ASSERT.equal(0xff, buffer[0]);
187 mod_ctype.wfloat(-3.4028234663852886e+38,
189 ASSERT.equal(0xff, buffer[0]);
190 ASSERT.equal(0x7f, buffer[1]);
191 ASSERT.equal(0xff, buffer[2]);
192 ASSERT.equal(0xff, buffer[3]);
193 mod_ctype.wfloat(-3.4028234663852886e+38,
194 'little', buffer, 0);
195 ASSERT.equal(0xff, buffer[3]);
196 ASSERT.equal(0x7f, buffer[2]);
197 ASSERT.equal(0xff, buffer[1]);
198 ASSERT.equal(0xff, buffer[0]);
200 /* Smallest normalied number +/- 1.1754943508222875e-38 */
202 mod_ctype.wfloat(1.1754943508222875e-38,
204 ASSERT.equal(0x00, buffer[0]);
205 ASSERT.equal(0x80, buffer[1]);
206 ASSERT.equal(0x00, buffer[2]);
207 ASSERT.equal(0x00, buffer[3]);
208 mod_ctype.wfloat(1.1754943508222875e-38,
209 'little', buffer, 0);
210 ASSERT.equal(0x00, buffer[3]);
211 ASSERT.equal(0x80, buffer[2]);
212 ASSERT.equal(0x00, buffer[1]);
213 ASSERT.equal(0x00, buffer[0]);
215 mod_ctype.wfloat(-1.1754943508222875e-38,
217 ASSERT.equal(0x80, buffer[0]);
218 ASSERT.equal(0x80, buffer[1]);
219 ASSERT.equal(0x00, buffer[2]);
220 ASSERT.equal(0x00, buffer[3]);
221 mod_ctype.wfloat(-1.1754943508222875e-38,
222 'little', buffer, 0);
223 ASSERT.equal(0x80, buffer[3]);
224 ASSERT.equal(0x80, buffer[2]);
225 ASSERT.equal(0x00, buffer[1]);
226 ASSERT.equal(0x00, buffer[0]);
228 /* Smallest denormalized number 1.401298464324817e-45 */
229 mod_ctype.wfloat(1.401298464324817e-45,
231 ASSERT.equal(0x00, buffer[0]);
232 ASSERT.equal(0x00, buffer[1]);
233 ASSERT.equal(0x00, buffer[2]);
234 ASSERT.equal(0x01, buffer[3]);
235 mod_ctype.wfloat(1.401298464324817e-45,
236 'little', buffer, 0);
237 ASSERT.equal(0x00, buffer[3]);
238 ASSERT.equal(0x00, buffer[2]);
239 ASSERT.equal(0x00, buffer[1]);
240 ASSERT.equal(0x01, buffer[0]);
242 mod_ctype.wfloat(-1.401298464324817e-45,
244 ASSERT.equal(0x80, buffer[0]);
245 ASSERT.equal(0x00, buffer[1]);
246 ASSERT.equal(0x00, buffer[2]);
247 ASSERT.equal(0x01, buffer[3]);
248 mod_ctype.wfloat(-1.401298464324817e-45,
249 'little', buffer, 0);
250 ASSERT.equal(0x80, buffer[3]);
251 ASSERT.equal(0x00, buffer[2]);
252 ASSERT.equal(0x00, buffer[1]);
253 ASSERT.equal(0x01, buffer[0]);
255 /* Largest denormalized value +/- 1.1754942106924411e-38 */
257 mod_ctype.wfloat(1.1754942106924411e-38,
259 ASSERT.equal(0x00, buffer[0]);
260 ASSERT.equal(0x7f, buffer[1]);
261 ASSERT.equal(0xff, buffer[2]);
262 ASSERT.equal(0xff, buffer[3]);
263 mod_ctype.wfloat(1.1754942106924411e-38,
264 'little', buffer, 0);
265 ASSERT.equal(0x00, buffer[3]);
266 ASSERT.equal(0x7f, buffer[2]);
267 ASSERT.equal(0xff, buffer[1]);
268 ASSERT.equal(0xff, buffer[0]);
270 mod_ctype.wfloat(-1.1754942106924411e-38,
272 ASSERT.equal(0x80, buffer[0]);
273 ASSERT.equal(0x7f, buffer[1]);
274 ASSERT.equal(0xff, buffer[2]);
275 ASSERT.equal(0xff, buffer[3]);
276 mod_ctype.wfloat(-1.1754942106924411e-38,
277 'little', buffer, 0);
278 ASSERT.equal(0x80, buffer[3]);
279 ASSERT.equal(0x7f, buffer[2]);
280 ASSERT.equal(0xff, buffer[1]);
281 ASSERT.equal(0xff, buffer[0]);
283 /* Do some quick offset testing */
284 buffer = new Buffer(6);
285 mod_ctype.wfloat(-1.2027516403607578e-32,
287 ASSERT.equal(0x8a, buffer[2]);
288 ASSERT.equal(0x79, buffer[3]);
289 ASSERT.equal(0xcd, buffer[4]);
290 ASSERT.equal(0x3f, buffer[5]);
292 mod_ctype.wfloat(-1.2027516403607578e-32,
293 'little', buffer, 2);
294 ASSERT.equal(0x8a, buffer[5]);
295 ASSERT.equal(0x79, buffer[4]);
296 ASSERT.equal(0xcd, buffer[3]);
297 ASSERT.equal(0x3f, buffer[2]);
301 function testdouble()
303 var buffer = new Buffer(10);
306 mod_ctype.wdouble(0, 'big', buffer, 0);
307 ASSERT.equal(0x00, buffer[0]);
308 ASSERT.equal(0x00, buffer[1]);
309 ASSERT.equal(0x00, buffer[2]);
310 ASSERT.equal(0x00, buffer[3]);
311 ASSERT.equal(0x00, buffer[4]);
312 ASSERT.equal(0x00, buffer[5]);
313 ASSERT.equal(0x00, buffer[6]);
314 ASSERT.equal(0x00, buffer[7]);
315 mod_ctype.wdouble(0, 'little', buffer, 0);
316 ASSERT.equal(0x00, buffer[7]);
317 ASSERT.equal(0x00, buffer[6]);
318 ASSERT.equal(0x00, buffer[5]);
319 ASSERT.equal(0x00, buffer[4]);
320 ASSERT.equal(0x00, buffer[3]);
321 ASSERT.equal(0x00, buffer[2]);
322 ASSERT.equal(0x00, buffer[1]);
323 ASSERT.equal(0x00, buffer[0]);
326 /* Similar to floats we are only generating a subset of values */
327 mod_ctype.wdouble(NaN, 'big', buffer, 0);
328 ASSERT.equal(0x7f, buffer[0]);
329 ASSERT.equal(0xf0, buffer[1]);
330 ASSERT.equal(0x00, buffer[2]);
331 ASSERT.equal(0x00, buffer[3]);
332 ASSERT.equal(0x00, buffer[4]);
333 ASSERT.equal(0x00, buffer[5]);
334 ASSERT.equal(0x00, buffer[6]);
335 ASSERT.equal(0x17, buffer[7]);
336 mod_ctype.wdouble(NaN, 'little', buffer, 0);
337 ASSERT.equal(0x7f, buffer[7]);
338 ASSERT.equal(0xf0, buffer[6]);
339 ASSERT.equal(0x00, buffer[5]);
340 ASSERT.equal(0x00, buffer[4]);
341 ASSERT.equal(0x00, buffer[3]);
342 ASSERT.equal(0x00, buffer[2]);
343 ASSERT.equal(0x00, buffer[1]);
344 ASSERT.equal(0x17, buffer[0]);
347 mod_ctype.wdouble(Number.POSITIVE_INFINITY,
349 ASSERT.equal(0x7f, buffer[0]);
350 ASSERT.equal(0xf0, buffer[1]);
351 ASSERT.equal(0x00, buffer[2]);
352 ASSERT.equal(0x00, buffer[3]);
353 ASSERT.equal(0x00, buffer[4]);
354 ASSERT.equal(0x00, buffer[5]);
355 ASSERT.equal(0x00, buffer[6]);
356 ASSERT.equal(0x00, buffer[7]);
357 mod_ctype.wdouble(Number.POSITIVE_INFINITY,
358 'little', buffer, 0);
359 ASSERT.equal(0x7f, buffer[7]);
360 ASSERT.equal(0xf0, buffer[6]);
361 ASSERT.equal(0x00, buffer[5]);
362 ASSERT.equal(0x00, buffer[4]);
363 ASSERT.equal(0x00, buffer[3]);
364 ASSERT.equal(0x00, buffer[2]);
365 ASSERT.equal(0x00, buffer[1]);
366 ASSERT.equal(0x00, buffer[0]);
369 mod_ctype.wdouble(Number.NEGATIVE_INFINITY,
371 ASSERT.equal(0xff, buffer[0]);
372 ASSERT.equal(0xf0, buffer[1]);
373 ASSERT.equal(0x00, buffer[2]);
374 ASSERT.equal(0x00, buffer[3]);
375 ASSERT.equal(0x00, buffer[4]);
376 ASSERT.equal(0x00, buffer[5]);
377 ASSERT.equal(0x00, buffer[6]);
378 ASSERT.equal(0x00, buffer[7]);
379 mod_ctype.wdouble(Number.NEGATIVE_INFINITY,
380 'little', buffer, 0);
381 ASSERT.equal(0xff, buffer[7]);
382 ASSERT.equal(0xf0, buffer[6]);
383 ASSERT.equal(0x00, buffer[5]);
384 ASSERT.equal(0x00, buffer[4]);
385 ASSERT.equal(0x00, buffer[3]);
386 ASSERT.equal(0x00, buffer[2]);
387 ASSERT.equal(0x00, buffer[1]);
388 ASSERT.equal(0x00, buffer[0]);
390 /* Simple normalized values */
393 mod_ctype.wdouble(1.125,
395 ASSERT.equal(0x3f, buffer[0]);
396 ASSERT.equal(0xf2, buffer[1]);
397 ASSERT.equal(0x00, buffer[2]);
398 ASSERT.equal(0x00, buffer[3]);
399 ASSERT.equal(0x00, buffer[4]);
400 ASSERT.equal(0x00, buffer[5]);
401 ASSERT.equal(0x00, buffer[6]);
402 ASSERT.equal(0x00, buffer[7]);
404 mod_ctype.wdouble(1.125,
405 'little', buffer, 0);
406 ASSERT.equal(0x3f, buffer[7]);
407 ASSERT.equal(0xf2, buffer[6]);
408 ASSERT.equal(0x00, buffer[5]);
409 ASSERT.equal(0x00, buffer[4]);
410 ASSERT.equal(0x00, buffer[3]);
411 ASSERT.equal(0x00, buffer[2]);
412 ASSERT.equal(0x00, buffer[1]);
413 ASSERT.equal(0x00, buffer[0]);
415 mod_ctype.wdouble(-1.125,
417 ASSERT.equal(0xbf, buffer[0]);
418 ASSERT.equal(0xf2, buffer[1]);
419 ASSERT.equal(0x00, buffer[2]);
420 ASSERT.equal(0x00, buffer[3]);
421 ASSERT.equal(0x00, buffer[4]);
422 ASSERT.equal(0x00, buffer[5]);
423 ASSERT.equal(0x00, buffer[6]);
424 ASSERT.equal(0x00, buffer[7]);
426 mod_ctype.wdouble(-1.125,
427 'little', buffer, 0);
428 ASSERT.equal(0xbf, buffer[7]);
429 ASSERT.equal(0xf2, buffer[6]);
430 ASSERT.equal(0x00, buffer[5]);
431 ASSERT.equal(0x00, buffer[4]);
432 ASSERT.equal(0x00, buffer[3]);
433 ASSERT.equal(0x00, buffer[2]);
434 ASSERT.equal(0x00, buffer[1]);
435 ASSERT.equal(0x00, buffer[0]);
438 /* +/- 1.4397318913736026e+283 */
439 mod_ctype.wdouble(1.4397318913736026e+283,
441 ASSERT.equal(0x7a, buffer[0]);
442 ASSERT.equal(0xb8, buffer[1]);
443 ASSERT.equal(0xc9, buffer[2]);
444 ASSERT.equal(0x34, buffer[3]);
445 ASSERT.equal(0x72, buffer[4]);
446 ASSERT.equal(0x16, buffer[5]);
447 ASSERT.equal(0xf9, buffer[6]);
448 ASSERT.equal(0x0e, buffer[7]);
450 mod_ctype.wdouble(1.4397318913736026e+283,
451 'little', buffer, 0);
452 ASSERT.equal(0x7a, buffer[7]);
453 ASSERT.equal(0xb8, buffer[6]);
454 ASSERT.equal(0xc9, buffer[5]);
455 ASSERT.equal(0x34, buffer[4]);
456 ASSERT.equal(0x72, buffer[3]);
457 ASSERT.equal(0x16, buffer[2]);
458 ASSERT.equal(0xf9, buffer[1]);
459 ASSERT.equal(0x0e, buffer[0]);
461 mod_ctype.wdouble(-1.4397318913736026e+283,
463 ASSERT.equal(0xfa, buffer[0]);
464 ASSERT.equal(0xb8, buffer[1]);
465 ASSERT.equal(0xc9, buffer[2]);
466 ASSERT.equal(0x34, buffer[3]);
467 ASSERT.equal(0x72, buffer[4]);
468 ASSERT.equal(0x16, buffer[5]);
469 ASSERT.equal(0xf9, buffer[6]);
470 ASSERT.equal(0x0e, buffer[7]);
472 mod_ctype.wdouble(-1.4397318913736026e+283,
473 'little', buffer, 0);
474 ASSERT.equal(0xfa, buffer[7]);
475 ASSERT.equal(0xb8, buffer[6]);
476 ASSERT.equal(0xc9, buffer[5]);
477 ASSERT.equal(0x34, buffer[4]);
478 ASSERT.equal(0x72, buffer[3]);
479 ASSERT.equal(0x16, buffer[2]);
480 ASSERT.equal(0xf9, buffer[1]);
481 ASSERT.equal(0x0e, buffer[0]);
483 /* Denormalized values */
484 /* +/- 8.82521232268344e-309 */
485 mod_ctype.wdouble(8.82521232268344e-309,
487 ASSERT.equal(0x00, buffer[0]);
488 ASSERT.equal(0x06, buffer[1]);
489 ASSERT.equal(0x58, buffer[2]);
490 ASSERT.equal(0x94, buffer[3]);
491 ASSERT.equal(0x13, buffer[4]);
492 ASSERT.equal(0x27, buffer[5]);
493 ASSERT.equal(0x8a, buffer[6]);
494 ASSERT.equal(0xcd, buffer[7]);
496 mod_ctype.wdouble(8.82521232268344e-309,
497 'little', buffer, 0);
498 ASSERT.equal(0x00, buffer[7]);
499 ASSERT.equal(0x06, buffer[6]);
500 ASSERT.equal(0x58, buffer[5]);
501 ASSERT.equal(0x94, buffer[4]);
502 ASSERT.equal(0x13, buffer[3]);
503 ASSERT.equal(0x27, buffer[2]);
504 ASSERT.equal(0x8a, buffer[1]);
505 ASSERT.equal(0xcd, buffer[0]);
507 mod_ctype.wdouble(-8.82521232268344e-309,
509 ASSERT.equal(0x80, buffer[0]);
510 ASSERT.equal(0x06, buffer[1]);
511 ASSERT.equal(0x58, buffer[2]);
512 ASSERT.equal(0x94, buffer[3]);
513 ASSERT.equal(0x13, buffer[4]);
514 ASSERT.equal(0x27, buffer[5]);
515 ASSERT.equal(0x8a, buffer[6]);
516 ASSERT.equal(0xcd, buffer[7]);
518 mod_ctype.wdouble(-8.82521232268344e-309,
519 'little', buffer, 0);
520 ASSERT.equal(0x80, buffer[7]);
521 ASSERT.equal(0x06, buffer[6]);
522 ASSERT.equal(0x58, buffer[5]);
523 ASSERT.equal(0x94, buffer[4]);
524 ASSERT.equal(0x13, buffer[3]);
525 ASSERT.equal(0x27, buffer[2]);
526 ASSERT.equal(0x8a, buffer[1]);
527 ASSERT.equal(0xcd, buffer[0]);
530 /* Edge cases, maximum and minimum values */
532 /* Smallest denormalized value 5e-324 */
533 mod_ctype.wdouble(5e-324,
535 ASSERT.equal(0x00, buffer[0]);
536 ASSERT.equal(0x00, buffer[1]);
537 ASSERT.equal(0x00, buffer[2]);
538 ASSERT.equal(0x00, buffer[3]);
539 ASSERT.equal(0x00, buffer[4]);
540 ASSERT.equal(0x00, buffer[5]);
541 ASSERT.equal(0x00, buffer[6]);
542 ASSERT.equal(0x01, buffer[7]);
544 mod_ctype.wdouble(5e-324,
545 'little', buffer, 0);
546 ASSERT.equal(0x00, buffer[7]);
547 ASSERT.equal(0x00, buffer[6]);
548 ASSERT.equal(0x00, buffer[5]);
549 ASSERT.equal(0x00, buffer[4]);
550 ASSERT.equal(0x00, buffer[3]);
551 ASSERT.equal(0x00, buffer[2]);
552 ASSERT.equal(0x00, buffer[1]);
553 ASSERT.equal(0x01, buffer[0]);
555 mod_ctype.wdouble(-5e-324,
557 ASSERT.equal(0x80, buffer[0]);
558 ASSERT.equal(0x00, buffer[1]);
559 ASSERT.equal(0x00, buffer[2]);
560 ASSERT.equal(0x00, buffer[3]);
561 ASSERT.equal(0x00, buffer[4]);
562 ASSERT.equal(0x00, buffer[5]);
563 ASSERT.equal(0x00, buffer[6]);
564 ASSERT.equal(0x01, buffer[7]);
566 mod_ctype.wdouble(-5e-324,
567 'little', buffer, 0);
568 ASSERT.equal(0x80, buffer[7]);
569 ASSERT.equal(0x00, buffer[6]);
570 ASSERT.equal(0x00, buffer[5]);
571 ASSERT.equal(0x00, buffer[4]);
572 ASSERT.equal(0x00, buffer[3]);
573 ASSERT.equal(0x00, buffer[2]);
574 ASSERT.equal(0x00, buffer[1]);
575 ASSERT.equal(0x01, buffer[0]);
579 /* Largest denormalized value 2.225073858507201e-308 */
580 mod_ctype.wdouble(2.225073858507201e-308,
582 ASSERT.equal(0x00, buffer[0]);
583 ASSERT.equal(0x0f, buffer[1]);
584 ASSERT.equal(0xff, buffer[2]);
585 ASSERT.equal(0xff, buffer[3]);
586 ASSERT.equal(0xff, buffer[4]);
587 ASSERT.equal(0xff, buffer[5]);
588 ASSERT.equal(0xff, buffer[6]);
589 ASSERT.equal(0xff, buffer[7]);
591 mod_ctype.wdouble(2.225073858507201e-308,
592 'little', buffer, 0);
593 ASSERT.equal(0x00, buffer[7]);
594 ASSERT.equal(0x0f, buffer[6]);
595 ASSERT.equal(0xff, buffer[5]);
596 ASSERT.equal(0xff, buffer[4]);
597 ASSERT.equal(0xff, buffer[3]);
598 ASSERT.equal(0xff, buffer[2]);
599 ASSERT.equal(0xff, buffer[1]);
600 ASSERT.equal(0xff, buffer[0]);
602 mod_ctype.wdouble(-2.225073858507201e-308,
604 ASSERT.equal(0x80, buffer[0]);
605 ASSERT.equal(0x0f, buffer[1]);
606 ASSERT.equal(0xff, buffer[2]);
607 ASSERT.equal(0xff, buffer[3]);
608 ASSERT.equal(0xff, buffer[4]);
609 ASSERT.equal(0xff, buffer[5]);
610 ASSERT.equal(0xff, buffer[6]);
611 ASSERT.equal(0xff, buffer[7]);
613 mod_ctype.wdouble(-2.225073858507201e-308,
614 'little', buffer, 0);
615 ASSERT.equal(0x80, buffer[7]);
616 ASSERT.equal(0x0f, buffer[6]);
617 ASSERT.equal(0xff, buffer[5]);
618 ASSERT.equal(0xff, buffer[4]);
619 ASSERT.equal(0xff, buffer[3]);
620 ASSERT.equal(0xff, buffer[2]);
621 ASSERT.equal(0xff, buffer[1]);
622 ASSERT.equal(0xff, buffer[0]);
625 /* Smallest normalized value 2.2250738585072014e-308 */
626 mod_ctype.wdouble(2.2250738585072014e-308,
628 ASSERT.equal(0x00, buffer[0]);
629 ASSERT.equal(0x10, buffer[1]);
630 ASSERT.equal(0x00, buffer[2]);
631 ASSERT.equal(0x00, buffer[3]);
632 ASSERT.equal(0x00, buffer[4]);
633 ASSERT.equal(0x00, buffer[5]);
634 ASSERT.equal(0x00, buffer[6]);
635 ASSERT.equal(0x00, buffer[7]);
637 mod_ctype.wdouble(2.2250738585072014e-308,
638 'little', buffer, 0);
639 ASSERT.equal(0x00, buffer[7]);
640 ASSERT.equal(0x10, buffer[6]);
641 ASSERT.equal(0x00, buffer[5]);
642 ASSERT.equal(0x00, buffer[4]);
643 ASSERT.equal(0x00, buffer[3]);
644 ASSERT.equal(0x00, buffer[2]);
645 ASSERT.equal(0x00, buffer[1]);
646 ASSERT.equal(0x00, buffer[0]);
648 mod_ctype.wdouble(-2.2250738585072014e-308,
650 ASSERT.equal(0x80, buffer[0]);
651 ASSERT.equal(0x10, buffer[1]);
652 ASSERT.equal(0x00, buffer[2]);
653 ASSERT.equal(0x00, buffer[3]);
654 ASSERT.equal(0x00, buffer[4]);
655 ASSERT.equal(0x00, buffer[5]);
656 ASSERT.equal(0x00, buffer[6]);
657 ASSERT.equal(0x00, buffer[7]);
659 mod_ctype.wdouble(-2.2250738585072014e-308,
660 'little', buffer, 0);
661 ASSERT.equal(0x80, buffer[7]);
662 ASSERT.equal(0x10, buffer[6]);
663 ASSERT.equal(0x00, buffer[5]);
664 ASSERT.equal(0x00, buffer[4]);
665 ASSERT.equal(0x00, buffer[3]);
666 ASSERT.equal(0x00, buffer[2]);
667 ASSERT.equal(0x00, buffer[1]);
668 ASSERT.equal(0x00, buffer[0]);
671 /* Largest normalized value 1.7976931348623157e+308 */
672 mod_ctype.wdouble(1.7976931348623157e+308,
674 ASSERT.equal(0x7f, buffer[0]);
675 ASSERT.equal(0xef, buffer[1]);
676 ASSERT.equal(0xff, buffer[2]);
677 ASSERT.equal(0xff, buffer[3]);
678 ASSERT.equal(0xff, buffer[4]);
679 ASSERT.equal(0xff, buffer[5]);
680 ASSERT.equal(0xff, buffer[6]);
681 ASSERT.equal(0xff, buffer[7]);
683 mod_ctype.wdouble(1.7976931348623157e+308,
684 'little', buffer, 0);
685 ASSERT.equal(0x7f, buffer[7]);
686 ASSERT.equal(0xef, buffer[6]);
687 ASSERT.equal(0xff, buffer[5]);
688 ASSERT.equal(0xff, buffer[4]);
689 ASSERT.equal(0xff, buffer[3]);
690 ASSERT.equal(0xff, buffer[2]);
691 ASSERT.equal(0xff, buffer[1]);
692 ASSERT.equal(0xff, buffer[0]);
694 mod_ctype.wdouble(-1.7976931348623157e+308,
696 ASSERT.equal(0xff, buffer[0]);
697 ASSERT.equal(0xef, buffer[1]);
698 ASSERT.equal(0xff, buffer[2]);
699 ASSERT.equal(0xff, buffer[3]);
700 ASSERT.equal(0xff, buffer[4]);
701 ASSERT.equal(0xff, buffer[5]);
702 ASSERT.equal(0xff, buffer[6]);
703 ASSERT.equal(0xff, buffer[7]);
705 mod_ctype.wdouble(-1.7976931348623157e+308,
706 'little', buffer, 0);
707 ASSERT.equal(0xff, buffer[7]);
708 ASSERT.equal(0xef, buffer[6]);
709 ASSERT.equal(0xff, buffer[5]);
710 ASSERT.equal(0xff, buffer[4]);
711 ASSERT.equal(0xff, buffer[3]);
712 ASSERT.equal(0xff, buffer[2]);
713 ASSERT.equal(0xff, buffer[1]);
714 ASSERT.equal(0xff, buffer[0]);
729 mod_ctype.wdouble(-0.000015130017658081283,
731 ASSERT.equal(0xbe, buffer[2]);
732 ASSERT.equal(0xef, buffer[3]);
733 ASSERT.equal(0xba, buffer[4]);
734 ASSERT.equal(0xdd, buffer[5]);
735 ASSERT.equal(0xca, buffer[6]);
736 ASSERT.equal(0xfe, buffer[7]);
737 ASSERT.equal(0x16, buffer[8]);
738 ASSERT.equal(0x79, buffer[9]);
740 mod_ctype.wdouble(-0.000015130017658081283,
741 'little', buffer, 2);
742 ASSERT.equal(0xbe, buffer[9]);
743 ASSERT.equal(0xef, buffer[8]);
744 ASSERT.equal(0xba, buffer[7]);
745 ASSERT.equal(0xdd, buffer[6]);
746 ASSERT.equal(0xca, buffer[5]);
747 ASSERT.equal(0xfe, buffer[4]);
748 ASSERT.equal(0x16, buffer[3]);
749 ASSERT.equal(0x79, buffer[2]);