@@ -138,9 +138,9 @@ public void testLongs() throws IOException
138
138
139
139
public void testArrayWithInts () throws IOException
140
140
{
141
- byte [] data = _smileDoc ("[ 1, 0, -1, 255, -999, "
142
- +Integer .MIN_VALUE +"," +Integer .MAX_VALUE +","
143
- +Long .MIN_VALUE +", " +Long .MAX_VALUE +" ]" );
141
+ byte [] data = _smileDoc ("[ 1, 0, -1, 255, -999, "
142
+ +Integer .MIN_VALUE +"," +Integer .MAX_VALUE +","
143
+ +Long .MIN_VALUE +", " +Long .MAX_VALUE +" ]" );
144
144
SmileParser p = _smileParser (data );
145
145
assertNull (p .getCurrentToken ());
146
146
assertToken (JsonToken .START_ARRAY , p .nextToken ());
@@ -182,60 +182,74 @@ public void testArrayWithInts() throws IOException
182
182
183
183
public void testFloats () throws IOException
184
184
{
185
- ByteArrayOutputStream bo = new ByteArrayOutputStream ();
186
- SmileGenerator g = smileGenerator (bo , false );
187
- float value = 0.37f ;
188
- g .writeNumber (value );
189
- g .close ();
190
- byte [] data = bo .toByteArray ();
191
- assertEquals (6 , data .length );
185
+ ByteArrayOutputStream bo = new ByteArrayOutputStream ();
186
+ SmileGenerator g = smileGenerator (bo , false );
187
+ float value = 0.37f ;
188
+ g .writeNumber (value );
189
+ g .close ();
190
+ byte [] data = bo .toByteArray ();
191
+ assertEquals (6 , data .length );
192
192
193
- SmileParser p = _smileParser (data );
194
- assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
195
- assertEquals (JsonParser .NumberType .FLOAT , p .getNumberType ());
196
- assertEquals (value , p .getFloatValue ());
197
- p .close ();
193
+ SmileParser p = _smileParser (data );
194
+ assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
195
+ assertFalse (p .isNaN ());
196
+ assertEquals (JsonParser .NumberType .FLOAT , p .getNumberType ());
197
+ assertEquals (value , p .getFloatValue ());
198
+ p .close ();
198
199
}
199
200
200
201
public void testDoubles () throws IOException
201
202
{
202
- ByteArrayOutputStream bo = new ByteArrayOutputStream ();
203
- SmileGenerator g = smileGenerator (bo , false );
204
- double value = -12.0986 ;
205
- g .writeNumber (value );
206
- g .close ();
207
- byte [] data = bo .toByteArray ();
208
- assertEquals (11 , data .length );
203
+ ByteArrayOutputStream bo = new ByteArrayOutputStream ();
204
+ SmileGenerator g = smileGenerator (bo , false );
205
+ double value = -12.0986 ;
206
+ g .writeNumber (value );
207
+ g .close ();
208
+ byte [] data = bo .toByteArray ();
209
+ assertEquals (11 , data .length );
209
210
210
- SmileParser p = _smileParser (data );
211
- assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
212
- assertEquals (JsonParser .NumberType .DOUBLE , p .getNumberType ());
213
- assertEquals (value , p .getDoubleValue ());
214
- p .close ();
211
+ SmileParser p = _smileParser (data );
212
+ assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
213
+ assertFalse (p .isNaN ());
214
+ assertEquals (JsonParser .NumberType .DOUBLE , p .getNumberType ());
215
+ assertEquals (value , p .getDoubleValue ());
216
+ p .close ();
215
217
}
216
-
218
+
217
219
public void testArrayWithDoubles () throws IOException
218
220
{
219
- ByteArrayOutputStream bo = new ByteArrayOutputStream ();
220
- SmileGenerator g = smileGenerator (bo , false );
221
- g .writeStartArray ();
222
- g .writeNumber (0.1f );
223
- g .writeNumber (0.333 );
224
- g .writeEndArray ();
225
- g .close ();
226
- byte [] data = bo .toByteArray ();
227
- assertEquals (19 , data .length );
221
+ final double [] values = new double [] {
222
+ 0.1 ,
223
+ 0.333 ,
224
+ Double .POSITIVE_INFINITY ,
225
+ Double .NaN ,
226
+ -2.5 ,
227
+ Double .NEGATIVE_INFINITY
228
+ };
229
+
230
+ ByteArrayOutputStream bo = new ByteArrayOutputStream ();
231
+ SmileGenerator g = smileGenerator (bo , false );
232
+ g .writeStartArray ();
233
+ for (double d : values ) {
234
+ g .writeNumber (d );
235
+ }
236
+ g .close ();
228
237
229
- SmileParser p = _smileParser (data );
230
- assertToken (JsonToken .START_ARRAY , p .nextToken ());
231
- assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
232
- assertEquals (JsonParser .NumberType .FLOAT , p .getNumberType ());
233
- assertEquals (0.1f , p .getFloatValue ());
234
- assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
235
- assertEquals (JsonParser .NumberType .DOUBLE , p .getNumberType ());
236
- assertEquals (0.333 , p .getDoubleValue ());
237
- assertToken (JsonToken .END_ARRAY , p .nextToken ());
238
- p .close ();
238
+ byte [] data = bo .toByteArray ();
239
+ // 10 bytes per double, array start, end
240
+ // assertEquals(2 + values.length * 10, data.length);
241
+
242
+ SmileParser p = _smileParser (data );
243
+ assertToken (JsonToken .START_ARRAY , p .nextToken ());
244
+ for (double exp : values ) {
245
+ assertToken (JsonToken .VALUE_NUMBER_FLOAT , p .nextToken ());
246
+ boolean expNaN = Double .isNaN (exp ) || Double .isInfinite (exp );
247
+ assertEquals (exp , p .getDoubleValue ());
248
+ assertEquals (expNaN , p .isNaN ());
249
+ }
250
+ assertToken (JsonToken .END_ARRAY , p .nextToken ());
251
+ assertNull (p .nextToken ());
252
+ p .close ();
239
253
}
240
254
241
255
public void testObjectWithDoubles () throws IOException
0 commit comments