@@ -128,9 +128,9 @@ public void FixedFormat()
128
128
// the E format can be used with all number types
129
129
[ DataRow ( "0" , "E" , "0.000000E+000" , true , true , true ) ]
130
130
[ DataRow ( "0" , "E4" , "0.0000E+000" , true , true , true ) ]
131
- [ DataRow ( "12345.6789" , "E" , "1.234567E +004" , true , true , false ) ]
132
- [ DataRow ( "12345.678" , "E6" , "1.234567E +004" , true , true , false ) ]
133
- [ DataRow ( "12345.6789" , "e4" , "1.2345e +004" , true , true , false ) ]
131
+ [ DataRow ( "12345.6789" , "E" , "1.234568E +004" , true , true , false ) ]
132
+ [ DataRow ( "12345.678" , "E6" , "1.234568E +004" , true , true , false ) ]
133
+ [ DataRow ( "12345.6789" , "e4" , "1.2346e +004" , true , true , false ) ]
134
134
[ DataRow ( "123" , "E" , "1.230000E+002" , true , true , true ) ]
135
135
[ DataRow ( "-123" , "E" , "-1.230000E+002" , true , true , true ) ]
136
136
[ DataRow ( "1.2345e-9" , "E" , "1.234500E-009" , true , false , false ) ]
@@ -176,36 +176,64 @@ public void ExponentialFormat(string valueStr, string formatString, string expec
176
176
177
177
[ TestMethod ]
178
178
// the G format can be used with all number types
179
- public void GeneralFormat ( )
179
+ [ DataRow ( "0" , "G" , "0" , false , false , true ) ]
180
+ [ DataRow ( "0" , "G4" , "0" , false , false , true ) ]
181
+ [ DataRow ( "123" , "G" , "123" , false , false , true ) ]
182
+ [ DataRow ( "129" , "G" , "129" , false , false , true ) ]
183
+ [ DataRow ( "-129" , "G" , "-129" , false , false , true ) ]
184
+ [ DataRow ( "128" , "G" , "128" , false , false , true ) ]
185
+ [ DataRow ( "128" , "G4" , "128" , false , false , true ) ]
186
+ [ DataRow ( "-128" , "G" , "-128" , false , false , true ) ]
187
+ [ DataRow ( "-128" , "G2" , "-1.3E+02" , false , false , true ) ]
188
+ [ DataRow ( "1234" , "G2" , "1.2E+03" , false , false , false ) ]
189
+ [ DataRow ( "-1234" , "G" , "-1234" , true , false , true ) ]
190
+ [ DataRow ( "1234" , "G6" , "1234" , true , false , true ) ]
191
+ [ DataRow ( "-1234" , "G6" , "-1234" , true , false , true ) ]
192
+ [ DataRow ( "123.78" , "G3" , "124" , true , true , false ) ]
193
+ [ DataRow ( "123.7841" , "G5" , "123.78" , true , true , false ) ]
194
+ [ DataRow ( "123.7851" , "G5" , "123.79" , true , true , false ) ]
195
+ [ DataRow ( "123.78" , "G5" , "123.78" , true , true , false ) ]
196
+ [ DataRow ( "123.78" , "G4" , "123.8" , true , true , false ) ]
197
+ [ DataRow ( "1234.8999" , "G5" , "1234.9" , true , true , false ) ]
198
+ [ DataRow ( "1234.8999" , "G6" , "1234.9" , true , true , false ) ]
199
+ [ DataRow ( "1234.8999" , "G7" , "1234.9" , true , true , false ) ]
200
+ [ DataRow ( "-1234.901" , "G7" , "-1234.901" , true , true , false ) ]
201
+ [ DataRow ( "1.2345E-09" , "G" , "1.2345E-09" , true , false , false ) ]
202
+ [ DataRow ( "1.7976931348623157E+275" , "G" , "1.7976931348623157E+275" , true , false , false ) ]
203
+ [ DataRow ( "-1.7976931348623157E+275" , "G" , "-1.7976931348623157E+275" , true , false , false ) ]
204
+ public void GeneralFormat ( string valueStr , string formatString , string expectedResult , bool testDouble , bool testSingle , bool testIntegers )
180
205
{
181
- sampleDisplay = new SampleDisplay ( ) ;
206
+ double value = double . Parse ( valueStr ) ;
182
207
183
- TestFormat ( "0" , "G" , "0" ) ;
184
- TestFormat ( "0" , "G4" , "0" ) ;
185
- TestFormat ( "123" , "G" , "123" ) ;
186
- TestFormat ( "129" , "G" , "129" ) ;
187
- TestFormat ( "-129" , "G" , "-129" ) ;
188
- TestFormat ( "128" , "G" , "128" ) ;
189
- TestFormat ( "128" , "G4" , "128" ) ;
190
- TestFormat ( "-128" , "G" , "-128" ) ;
191
- TestFormat ( "-128" , "G2" , "-1.3E+02" ) ;
192
- TestFormat ( "1234" , "G2" , "1.2E+03" ) ;
193
- TestFormat ( "-1234" , "G" , "-1234" ) ;
194
- TestFormat ( "1234" , "G6" , "1234" ) ;
195
- TestFormat ( "-1234" , "G6" , "-1234" ) ;
196
- TestFormat ( "123.78" , "G3" , "124" ) ;
197
- TestFormat ( "123.7841" , "G5" , "123.78" ) ;
198
- TestFormat ( "123.7851" , "G5" , "123.79" ) ;
199
- TestFormat ( "123.78" , "G5" , "123.78" ) ;
200
- TestFormat ( "123.78" , "G4" , "123.8" ) ;
201
- TestFormat ( "1234.8999" , "G5" , "1234.9" ) ;
202
- TestFormat ( "1234.8999" , "G6" , "1234.9" ) ;
203
- TestFormat ( "1234.8999" , "G7" , "1234.9" ) ;
204
- TestFormat ( "-1234.901" , "G7" , "-1234.901" ) ;
205
- TestFormat ( "1.2345E-9" , "G" , "1.2345E-09" ) ;
206
208
207
- sampleDisplay . WriteOutput ( ) ;
209
+ if ( testDouble )
210
+ {
211
+ CheckValue ( double . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Double , null ) ;
212
+ Assert . IsTrue ( double . TryParse ( valueStr , out double result ) , $ "TryParse failed for double { valueStr } ") ;
213
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Double , null ) ;
214
+ }
215
+
216
+ if ( testSingle )
217
+ {
218
+ CheckValue ( float . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Single , null ) ;
219
+ Assert . IsTrue ( float . TryParse ( valueStr , out float result ) , $ "TryParse failed for float { valueStr } ") ;
220
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Single , null ) ;
221
+ }
208
222
223
+ if ( testIntegers )
224
+ {
225
+ // can't test negative values with UInt64
226
+ if ( value > 0 )
227
+ {
228
+ CheckValue ( ulong . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . UInt64 , null ) ;
229
+ Assert . IsTrue ( ulong . TryParse ( valueStr , out ulong result ) , $ "TryParse failed for ulong { valueStr } ") ;
230
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . UInt64 , null ) ;
231
+ }
232
+
233
+ CheckValue ( long . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Int64 , null ) ;
234
+ Assert . IsTrue ( long . TryParse ( valueStr , out long result1 ) , $ "TryParse failed for long { valueStr } ") ;
235
+ CheckValue ( result1 , valueStr , formatString , expectedResult , ColumnType . Int64 , null ) ;
236
+ }
209
237
}
210
238
211
239
[ TestMethod ]
@@ -235,7 +263,7 @@ public void NumberFormat()
235
263
236
264
[ TestMethod ]
237
265
// the X format can only be used with integer number types
238
- public void HexFormat ( )
266
+ public void HexFormat_00 ( )
239
267
{
240
268
sampleDisplay = new SampleDisplay ( ) ;
241
269
@@ -248,9 +276,7 @@ public void HexFormat()
248
276
TestFormat ( " 127" , "X" , "7F" ) ;
249
277
TestFormat ( " 129" , "X" , "81" ) ;
250
278
251
- TestFormat ( " 128" , "X4" , "0080" ) ;
252
279
TestFormat ( " 1234" , "X" , "4D2" ) ;
253
- TestFormat ( " 1234" , "X6" , "0004D2" ) ;
254
280
TestFormat ( " -127" , "X" , "81" ) ;
255
281
TestFormat ( " -128" , "X" , "80" ) ;
256
282
TestFormat ( " -128" , "X4" , "80" ) ;
@@ -261,11 +287,18 @@ public void HexFormat()
261
287
sampleDisplay . WriteOutput ( ) ;
262
288
}
263
289
290
+ [ TestMethod ]
291
+ // the X format can only be used with integer number types
292
+ public void HexFormat_01 ( )
293
+ {
294
+ Assert . AreEqual ( "0080" , int . Parse ( " 128" ) . ToString ( "X4" ) , "Wrong output for 128 X4" ) ;
295
+ Assert . AreEqual ( "0004D2" , int . Parse ( " 1234" ) . ToString ( "X6" ) , "Wrong output for 1234 X6" ) ;
296
+ }
264
297
265
298
#region Helper functions
266
299
private void TestFormat ( string valueStr , string formatString , string expectedResult , Case formatCase = Case . Both )
267
300
{
268
- double value = Double . Parse ( valueStr ) ; // !!! does not return a negative number when parsed if string value does not contain a decimal point
301
+ double value = double . Parse ( valueStr ) ; // !!! does not return a negative number when parsed if string value does not contain a decimal point
269
302
bool isNegative = false ;
270
303
NumType numType = NumType . All ;
271
304
@@ -311,120 +344,120 @@ private void TestFormat(string valueStr, string formatString, string expectedRes
311
344
312
345
private void TestFormatInner ( string valueStr , string formatString , string expectedResult , NumType numType , bool isNegative )
313
346
{
314
- SampleDisplay . RowData rowData = sampleDisplay . AddRow ( valueStr , formatString ) ;
315
- double value = Double . Parse ( valueStr ) ;
316
- if ( value <= SByte . MaxValue
317
- && value >= SByte . MinValue
347
+ RowData rowData = sampleDisplay . AddRow ( valueStr , formatString ) ;
348
+ double value = double . Parse ( valueStr ) ;
349
+ if ( value <= sbyte . MaxValue
350
+ && value >= sbyte . MinValue
318
351
&& ( numType == NumType . IntOnly || numType == NumType . All )
319
352
)
320
353
{
321
- CheckValue ( sbyte . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . SByte , rowData ) ;
354
+ CheckValue ( sbyte . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . SByte , rowData ) ;
322
355
323
356
Assert . IsTrue ( sbyte . TryParse ( valueStr , out sbyte result ) , $ "TryParse failed for sbyte { valueStr } ") ;
324
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . SByte , rowData ) ;
357
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . SByte , rowData ) ;
325
358
}
326
359
327
- if ( value <= Int16 . MaxValue
328
- && value >= Int16 . MinValue
360
+ if ( value <= short . MaxValue
361
+ && value >= short . MinValue
329
362
&& ( numType == NumType . IntOnly || numType == NumType . All )
330
363
)
331
364
{
332
- CheckValue ( short . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int16 , rowData ) ;
365
+ CheckValue ( short . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Int16 , rowData ) ;
333
366
334
367
Assert . IsTrue ( short . TryParse ( valueStr , out short result ) , $ "TryParse failed for short { valueStr } ") ;
335
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int16 , rowData ) ;
368
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Int16 , rowData ) ;
336
369
}
337
370
338
- if ( value <= Int32 . MaxValue
339
- && value >= Int32 . MinValue
371
+ if ( value <= int . MaxValue
372
+ && value >= int . MinValue
340
373
&& ( numType == NumType . IntOnly || numType == NumType . All )
341
374
)
342
375
{
343
- CheckValue ( int . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int32 , rowData ) ;
376
+ CheckValue ( int . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Int32 , rowData ) ;
344
377
345
378
Assert . IsTrue ( int . TryParse ( valueStr , out int result ) , $ "TryParse failed for int { valueStr } ") ;
346
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int32 , rowData ) ;
379
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Int32 , rowData ) ;
347
380
}
348
381
349
- if ( value <= Int64 . MaxValue
350
- && value >= Int64 . MinValue
382
+ if ( value <= long . MaxValue
383
+ && value >= long . MinValue
351
384
&& ( numType == NumType . IntOnly || numType == NumType . All )
352
385
)
353
386
{
354
- CheckValue ( long . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int64 , rowData ) ;
387
+ CheckValue ( long . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Int64 , rowData ) ;
355
388
356
389
Assert . IsTrue ( long . TryParse ( valueStr , out long result ) , $ "TryParse failed for long { valueStr } ") ;
357
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Int64 , rowData ) ;
390
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Int64 , rowData ) ;
358
391
}
359
392
360
- if ( value <= Byte . MaxValue
361
- && value >= Byte . MinValue
393
+ if ( value <= byte . MaxValue
394
+ && value >= byte . MinValue
362
395
&& ( numType == NumType . IntOnly || numType == NumType . All )
363
396
&& ! isNegative )
364
397
{
365
- CheckValue ( byte . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Byte , rowData ) ;
398
+ CheckValue ( byte . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Byte , rowData ) ;
366
399
367
400
Assert . IsTrue ( byte . TryParse ( valueStr , out byte result ) , $ "TryParse failed for byte { valueStr } ") ;
368
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Byte , rowData ) ;
401
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Byte , rowData ) ;
369
402
}
370
403
371
- if ( value <= UInt16 . MaxValue
372
- && value >= UInt16 . MinValue
404
+ if ( value <= ushort . MaxValue
405
+ && value >= ushort . MinValue
373
406
&& ( numType == NumType . IntOnly || numType == NumType . All )
374
407
&& ! isNegative )
375
408
{
376
- CheckValue ( ushort . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt16 , rowData ) ;
377
-
409
+ CheckValue ( ushort . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . UInt16 , rowData ) ;
410
+
378
411
Assert . IsTrue ( ushort . TryParse ( valueStr , out ushort result ) , $ "TryParse failed for ushort { valueStr } ") ;
379
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt16 , rowData ) ;
412
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . UInt16 , rowData ) ;
380
413
}
381
414
382
- if ( value <= UInt32 . MaxValue
383
- && value >= UInt32 . MinValue
415
+ if ( value <= uint . MaxValue
416
+ && value >= uint . MinValue
384
417
&& ( numType == NumType . IntOnly || numType == NumType . All )
385
418
&& ! isNegative )
386
419
{
387
- CheckValue ( uint . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt32 , rowData ) ;
420
+ CheckValue ( uint . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . UInt32 , rowData ) ;
388
421
389
422
Assert . IsTrue ( uint . TryParse ( valueStr , out uint result ) , $ "TryParse failed for uint { valueStr } ") ;
390
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt32 , rowData ) ;
423
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . UInt32 , rowData ) ;
391
424
}
392
425
393
- if ( value <= UInt64 . MaxValue
394
- && value >= UInt64 . MinValue
426
+ if ( value <= ulong . MaxValue
427
+ && value >= ulong . MinValue
395
428
&& ( numType == NumType . IntOnly || numType == NumType . All )
396
429
&& ! isNegative )
397
430
{
398
- CheckValue ( ulong . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt64 , rowData ) ;
431
+ CheckValue ( ulong . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . UInt64 , rowData ) ;
399
432
400
433
Assert . IsTrue ( ulong . TryParse ( valueStr , out ulong result ) , $ "TryParse failed for ulong { valueStr } ") ;
401
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . UInt64 , rowData ) ;
434
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . UInt64 , rowData ) ;
402
435
}
403
436
404
- if ( value <= Single . MaxValue
405
- && value >= Single . MinValue
437
+ if ( value <= float . MaxValue
438
+ && value >= float . MinValue
406
439
&& ( numType == NumType . FloatDoubleOnly || numType == NumType . All )
407
440
)
408
441
{
409
- CheckValue ( float . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Single , rowData ) ;
442
+ CheckValue ( float . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Single , rowData ) ;
410
443
411
444
Assert . IsTrue ( float . TryParse ( valueStr , out float result ) , $ "TryParse failed for float { valueStr } ") ;
412
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Single , rowData ) ;
445
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Single , rowData ) ;
413
446
}
414
447
415
- if ( value <= Double . MaxValue
416
- && value >= Double . MinValue
448
+ if ( value <= double . MaxValue
449
+ && value >= double . MinValue
417
450
&& ( numType == NumType . FloatDoubleOnly || numType == NumType . All )
418
451
)
419
452
{
420
- CheckValue ( double . Parse ( valueStr ) , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Double , rowData ) ;
453
+ CheckValue ( double . Parse ( valueStr ) , valueStr , formatString , expectedResult , ColumnType . Double , rowData ) ;
421
454
422
455
Assert . IsTrue ( double . TryParse ( valueStr , out double result ) , $ "TryParse failed for double { valueStr } ") ;
423
- CheckValue ( result , valueStr , formatString , expectedResult , SampleDisplay . ColumnType . Double , rowData ) ;
456
+ CheckValue ( result , valueStr , formatString , expectedResult , ColumnType . Double , rowData ) ;
424
457
}
425
458
}
426
459
427
- private void CheckValue ( object value , string valueStr , string formatString , string expectedResult , SampleDisplay . ColumnType columnType , SampleDisplay . RowData rowData )
460
+ private void CheckValue ( object value , string valueStr , string formatString , string expectedResult , ColumnType columnType , RowData rowData )
428
461
{
429
462
string result = string . Format ( $ "{{0:{ formatString } }}", new object [ ] { value } ) ;
430
463
// for format of X if the number is negative there will be extra F's in the front depending on integer size.
@@ -471,18 +504,18 @@ public ColumnInfo(string columnHeader)
471
504
472
505
public SampleDisplay ( )
473
506
{
474
- AddColumn ( "Value" , SampleDisplay . ColumnType . Value ) ;
475
- AddColumn ( "Format" , SampleDisplay . ColumnType . FormatString ) ;
476
- AddColumn ( "SByte" , SampleDisplay . ColumnType . SByte ) ;
477
- AddColumn ( "Int16" , SampleDisplay . ColumnType . Int16 ) ;
478
- AddColumn ( "Int32" , SampleDisplay . ColumnType . Int32 ) ;
479
- AddColumn ( "Int64" , SampleDisplay . ColumnType . Int64 ) ;
480
- AddColumn ( "Byte" , SampleDisplay . ColumnType . Byte ) ;
481
- AddColumn ( "UInt16" , SampleDisplay . ColumnType . UInt16 ) ;
482
- AddColumn ( "UInt32" , SampleDisplay . ColumnType . UInt32 ) ;
483
- AddColumn ( "UInt64" , SampleDisplay . ColumnType . UInt64 ) ;
484
- AddColumn ( "Single" , SampleDisplay . ColumnType . Single ) ;
485
- AddColumn ( "Double" , SampleDisplay . ColumnType . Double ) ;
507
+ AddColumn ( "Value" , ColumnType . Value ) ;
508
+ AddColumn ( "Format" , ColumnType . FormatString ) ;
509
+ AddColumn ( "SByte" , ColumnType . SByte ) ;
510
+ AddColumn ( "Int16" , ColumnType . Int16 ) ;
511
+ AddColumn ( "Int32" , ColumnType . Int32 ) ;
512
+ AddColumn ( "Int64" , ColumnType . Int64 ) ;
513
+ AddColumn ( "Byte" , ColumnType . Byte ) ;
514
+ AddColumn ( "UInt16" , ColumnType . UInt16 ) ;
515
+ AddColumn ( "UInt32" , ColumnType . UInt32 ) ;
516
+ AddColumn ( "UInt64" , ColumnType . UInt64 ) ;
517
+ AddColumn ( "Single" , ColumnType . Single ) ;
518
+ AddColumn ( "Double" , ColumnType . Double ) ;
486
519
}
487
520
488
521
public ColumnInfo GetColumnInfo ( ColumnType columnType )
0 commit comments