@@ -138,9 +138,9 @@ public void testLongs() throws IOException
138138
139139 public void testArrayWithInts () throws IOException
140140 {
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 +" ]" );
144144 SmileParser p = _smileParser (data );
145145 assertNull (p .getCurrentToken ());
146146 assertToken (JsonToken .START_ARRAY , p .nextToken ());
@@ -182,60 +182,74 @@ public void testArrayWithInts() throws IOException
182182
183183 public void testFloats () throws IOException
184184 {
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 );
192192
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 ();
198199 }
199200
200201 public void testDoubles () throws IOException
201202 {
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 );
209210
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 ();
215217 }
216-
218+
217219 public void testArrayWithDoubles () throws IOException
218220 {
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 ();
228237
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 ();
239253 }
240254
241255 public void testObjectWithDoubles () throws IOException
0 commit comments