@@ -67,9 +67,17 @@ public void TestAsBigInteger() {
67
67
CBORObject numberinfo = numbers .get (i );
68
68
String numberString = (String )numberinfo .get ("number" )
69
69
.ToObject (String .class );
70
- CBORObject cbornumber =
71
- ToObjectTest .TestToFromObjectRoundTrip (
70
+ CBORObject cbornumber = null ;
71
+ try {
72
+ cbornumber = ToObjectTest .TestToFromObjectRoundTrip (
72
73
new BigDecimal (numberString ));
74
+ } catch (NumberFormatException nfe ) {
75
+ EDecimal ed =EDecimal .FromString (numberString );
76
+ if (ed .isFinite ()) {
77
+ Assert .fail ();
78
+ }
79
+ continue ;
80
+ }
73
81
if (!numberinfo .get ("integer" ).equals (CBORObject .Null )) {
74
82
Assert .assertEquals (
75
83
numberinfo .get ("integer" ).ToObject (String .class ),
@@ -252,15 +260,58 @@ public void TestAsBigInteger() {
252
260
}
253
261
}
254
262
263
+ public static BigDecimal RandomBigDecimal (IRandomGenExtended r ) {
264
+ return RandomBigDecimal (r , null );
265
+ }
266
+
267
+ public static BigDecimal RandomBigDecimal (IRandomGenExtended r , String []
268
+ decimalString ) {
269
+ if (r == null ) {
270
+ throw new NullPointerException ("r" );
271
+ }
272
+ if (r .GetInt32 (100 ) < 30 ) {
273
+ String str = RandomObjects .RandomDecimalString (r );
274
+ if (str .length () < 500 ) {
275
+ if (decimalString != null ) {
276
+ decimalString [0 ] = str ;
277
+ }
278
+ return new BigDecimal (str );
279
+ }
280
+ }
281
+ EInteger emant = RandomObjects .RandomEInteger (r );
282
+ int exp = (r .GetInt32 (100 ) < 80 ) ? (r .GetInt32 (50 ) - 25 ) :
283
+ (r .GetInt32 (5000 ) - 2500 );
284
+ BigDecimal ed = new BigDecimal (new BigInteger (emant .ToBytes (false )), -exp );
285
+ if (decimalString != null ) {
286
+ decimalString [0 ] = emant .toString () + "E" + EInteger .FromInt32 (-exp ).toString ();
287
+ }
288
+ return ed ;
289
+ }
290
+
255
291
@ Test
256
292
public void TestAsBigDecimal () {
293
+ BigDecimal bd =new BigDecimal ("334.337" );
294
+ CBORObject cborObject =CBORObject .FromObject (bd );
295
+ EDecimal ed =cborObject .ToObject (EDecimal .class );
296
+ Assert .assertEquals ("334.337" ,ed .toString ());
297
+ bd =cborObject .ToObject (BigDecimal .class );
298
+ Assert .assertEquals ("334.337" ,bd .toString ());
299
+ RandomGenerator rg =new RandomGenerator ();
300
+ for (int i =0 ;i <500 ;i ++){
301
+ bd =RandomBigDecimal (rg ,null );
302
+ String str =bd .toString ();
303
+ cborObject =CBORObject .FromObject (bd );
304
+ ed =cborObject .ToObject (EDecimal .class );
305
+ Assert .assertEquals (str ,ed .toString ());
306
+ bd =cborObject .ToObject (BigDecimal .class );
307
+ }
257
308
try {
258
309
Object objectTemp = CBORTestCommon .DecPosInf ;
259
310
Object objectTemp2 =
260
311
ToObjectTest .TestToFromObjectRoundTrip (Float .POSITIVE_INFINITY )
261
312
.ToObject (BigDecimal .class );
262
- Assert .assertEquals ( objectTemp , objectTemp2 );
263
- } catch (ArithmeticException ex ) {
313
+ Assert .fail ( "Should have failed" );
314
+ } catch (CBORException ex ) {
264
315
// NOTE: Intentionally empty
265
316
} catch (Exception ex ) {
266
317
Assert .fail (ex .toString ());
@@ -271,8 +322,8 @@ public void TestAsBigDecimal() {
271
322
Object objectTemp2 =
272
323
ToObjectTest .TestToFromObjectRoundTrip (Float .NEGATIVE_INFINITY )
273
324
.ToObject (BigDecimal .class );
274
- Assert .assertEquals ( objectTemp , objectTemp2 );
275
- } catch (ArithmeticException ex ) {
325
+ Assert .fail ( "Should have failed" );
326
+ } catch (CBORException ex ) {
276
327
// NOTE: Intentionally empty
277
328
} catch (Exception ex ) {
278
329
Assert .fail (ex .toString ());
@@ -281,10 +332,8 @@ public void TestAsBigDecimal() {
281
332
try {
282
333
String stringTemp = ToObjectTest .TestToFromObjectRoundTrip (Float .NaN )
283
334
.ToObject (BigDecimal .class ).toString ();
284
- Assert .assertEquals (
285
- "NaN" ,
286
- stringTemp );
287
- } catch (ArithmeticException ex ) {
335
+ Assert .fail ("Should have failed" );
336
+ } catch (CBORException ex ) {
288
337
// NOTE: Intentionally empty
289
338
} catch (Exception ex ) {
290
339
Assert .fail (ex .toString ());
@@ -295,8 +344,8 @@ public void TestAsBigDecimal() {
295
344
Object objectTemp2 =
296
345
ToObjectTest .TestToFromObjectRoundTrip (Double .POSITIVE_INFINITY )
297
346
.ToObject (BigDecimal .class );
298
- Assert .assertEquals ( objectTemp , objectTemp2 );
299
- } catch (ArithmeticException ex ) {
347
+ Assert .fail ( "Should have failed" );
348
+ } catch (CBORException ex ) {
300
349
// NOTE: Intentionally empty
301
350
} catch (Exception ex ) {
302
351
Assert .fail (ex .toString ());
@@ -307,8 +356,8 @@ public void TestAsBigDecimal() {
307
356
Object objectTemp2 =
308
357
ToObjectTest .TestToFromObjectRoundTrip (Double .NEGATIVE_INFINITY )
309
358
.ToObject (BigDecimal .class );
310
- Assert .assertEquals ( objectTemp , objectTemp2 );
311
- } catch (ArithmeticException ex ) {
359
+ Assert .fail ( "Should have failed" );
360
+ } catch (CBORException ex ) {
312
361
// NOTE: Intentionally empty
313
362
} catch (Exception ex ) {
314
363
Assert .fail (ex .toString ());
@@ -319,8 +368,8 @@ public void TestAsBigDecimal() {
319
368
Object objectTemp2 =
320
369
ToObjectTest .TestToFromObjectRoundTrip (Double .NaN )
321
370
.ToObject (BigDecimal .class ).toString ();
322
- Assert .assertEquals ( objectTemp , objectTemp2 );
323
- } catch (ArithmeticException ex ) {
371
+ Assert .fail ( "Should have failed" );
372
+ } catch (CBORException ex ) {
324
373
// NOTE: Intentionally empty
325
374
} catch (Exception ex ) {
326
375
Assert .fail (ex .toString ());
0 commit comments