@@ -51,6 +51,10 @@ TEST(SchemaValidator, Hasher) {
51
51
TEST_HASHER (" false" , " null" , false );
52
52
53
53
TEST_HASHER (" 1" , " 1" , true );
54
+ TEST_HASHER (" 2147483648" , " 2147483648" , true ); // 2^31 can only be fit in unsigned
55
+ TEST_HASHER (" -2147483649" , " -2147483649" , true ); // -2^31 - 1 can only be fit in int64_t
56
+ TEST_HASHER (" 2147483648" , " 2147483648" , true ); // 2^31 can only be fit in unsigned
57
+ TEST_HASHER (" 4294967296" , " 4294967296" , true ); // 2^32 can only be fit in int64_t
54
58
TEST_HASHER (" 1.5" , " 1.5" , true );
55
59
TEST_HASHER (" 1" , " 1.0" , true );
56
60
TEST_HASHER (" 1" , " -1" , false );
@@ -316,6 +320,10 @@ TEST(SchemaValidator, String) {
316
320
317
321
VALIDATE (s, " \" I'm a string\" " , true );
318
322
INVALIDATE (s, " 42" , " " , " type" , " " );
323
+ INVALIDATE (s, " 2147483648" , " " , " type" , " " ); // 2^31 can only be fit in unsigned
324
+ INVALIDATE (s, " -2147483649" , " " , " type" , " " ); // -2^31 - 1 can only be fit in int64_t
325
+ INVALIDATE (s, " 4294967296" , " " , " type" , " " ); // 2^32 can only be fit in int64_t
326
+ INVALIDATE (s, " 3.1415926" , " " , " type" , " " );
319
327
}
320
328
321
329
TEST (SchemaValidator, String_LengthRange) {
@@ -340,6 +348,16 @@ TEST(SchemaValidator, String_Pattern) {
340
348
INVALIDATE (s, " \" (888)555-1212 ext. 532\" " , " " , " pattern" , " " );
341
349
INVALIDATE (s, " \" (800)FLOWERS\" " , " " , " pattern" , " " );
342
350
}
351
+
352
+ TEST (SchemaValidator, String_Pattern_Invalid) {
353
+ Document sd;
354
+ sd.Parse (" {\" type\" :\" string\" ,\" pattern\" :\" a{0}\" }" ); // TODO: report regex is invalid somehow
355
+ SchemaDocument s (sd);
356
+
357
+ VALIDATE (s, " \"\" " , true );
358
+ VALIDATE (s, " \" a\" " , true );
359
+ VALIDATE (s, " \" aa\" " , true );
360
+ }
343
361
#endif
344
362
345
363
TEST (SchemaValidator, Integer) {
@@ -349,6 +367,10 @@ TEST(SchemaValidator, Integer) {
349
367
350
368
VALIDATE (s, " 42" , true );
351
369
VALIDATE (s, " -1" , true );
370
+ VALIDATE (s, " 2147483648" , true ); // 2^31 can only be fit in unsigned
371
+ VALIDATE (s, " -2147483649" , true ); // -2^31 - 1 can only be fit in int64_t
372
+ VALIDATE (s, " 2147483648" , true ); // 2^31 can only be fit in unsigned
373
+ VALIDATE (s, " 4294967296" , true ); // 2^32 can only be fit in int64_t
352
374
INVALIDATE (s, " 3.1415926" , " " , " type" , " " );
353
375
INVALIDATE (s, " \" 42\" " , " " , " type" , " " );
354
376
}
@@ -368,11 +390,34 @@ TEST(SchemaValidator, Integer_Range) {
368
390
369
391
TEST (SchemaValidator, Integer_Range64Boundary) {
370
392
Document sd;
371
- sd.Parse (" {\" type\" :\" integer\" ,\" minimum\" :-9223372036854775807,\" maximum\" :18446744073709551614 }" );
393
+ sd.Parse (" {\" type\" :\" integer\" ,\" minimum\" :-9223372036854775807,\" maximum\" :9223372036854775806 }" );
372
394
SchemaDocument s (sd);
373
395
374
396
INVALIDATE (s, " -9223372036854775808" , " " , " minimum" , " " );
375
397
VALIDATE (s, " -9223372036854775807" , true );
398
+ VALIDATE (s, " -2147483648" , true ); // int min
399
+ VALIDATE (s, " 0" , true );
400
+ VALIDATE (s, " 2147483647" , true ); // int max
401
+ VALIDATE (s, " 2147483648" , true ); // unsigned first
402
+ VALIDATE (s, " 4294967296" , true ); // unsigned max
403
+ VALIDATE (s, " 9223372036854775806" , true );
404
+ INVALIDATE (s, " 9223372036854775807" , " " , " maximum" , " " );
405
+ INVALIDATE (s, " 18446744073709551615" , " " , " maximum" , " " ); // uint64_t max
406
+ }
407
+
408
+ TEST (SchemaValidator, Integer_RangeU64Boundary) {
409
+ Document sd;
410
+ sd.Parse (" {\" type\" :\" integer\" ,\" minimum\" :9223372036854775808,\" maximum\" :18446744073709551614}" );
411
+ SchemaDocument s (sd);
412
+
413
+ INVALIDATE (s, " -9223372036854775808" , " " , " minimum" , " " );
414
+ INVALIDATE (s, " 9223372036854775807" , " " , " minimum" , " " );
415
+ INVALIDATE (s, " -2147483648" , " " , " minimum" , " " ); // int min
416
+ INVALIDATE (s, " 0" , " " , " minimum" , " " );
417
+ INVALIDATE (s, " 2147483647" , " " , " minimum" , " " ); // int max
418
+ INVALIDATE (s, " 2147483648" , " " , " minimum" , " " ); // unsigned first
419
+ INVALIDATE (s, " 4294967296" , " " , " minimum" , " " ); // unsigned max
420
+ VALIDATE (s, " 9223372036854775808" , true );
376
421
VALIDATE (s, " 18446744073709551614" , true );
377
422
INVALIDATE (s, " 18446744073709551615" , " " , " maximum" , " " );
378
423
}
@@ -418,10 +463,37 @@ TEST(SchemaValidator, Number_Range) {
418
463
419
464
INVALIDATE (s, " -1" , " " , " minimum" , " " );
420
465
VALIDATE (s, " 0" , true );
466
+ VALIDATE (s, " 0.1" , true );
421
467
VALIDATE (s, " 10" , true );
422
468
VALIDATE (s, " 99" , true );
469
+ VALIDATE (s, " 99.9" , true );
423
470
INVALIDATE (s, " 100" , " " , " maximum" , " " );
471
+ INVALIDATE (s, " 100.0" , " " , " maximum" , " " );
472
+ INVALIDATE (s, " 101.5" , " " , " maximum" , " " );
473
+ }
474
+
475
+ TEST (SchemaValidator, Number_RangeDouble) {
476
+ Document sd;
477
+ sd.Parse (" {\" type\" :\" number\" ,\" minimum\" :0.1,\" maximum\" :100.1,\" exclusiveMaximum\" :true}" );
478
+ SchemaDocument s (sd);
479
+
480
+ INVALIDATE (s, " -9223372036854775808" , " " , " minimum" , " " );
481
+ INVALIDATE (s, " -2147483648" , " " , " minimum" , " " ); // int min
482
+ INVALIDATE (s, " -1" , " " , " minimum" , " " );
483
+ VALIDATE (s, " 0.1" , true );
484
+ VALIDATE (s, " 10" , true );
485
+ VALIDATE (s, " 99" , true );
486
+ VALIDATE (s, " 100" , true );
424
487
INVALIDATE (s, " 101" , " " , " maximum" , " " );
488
+ INVALIDATE (s, " 101.5" , " " , " maximum" , " " );
489
+ INVALIDATE (s, " 18446744073709551614" , " " , " maximum" , " " );
490
+ INVALIDATE (s, " 18446744073709551615" , " " , " maximum" , " " );
491
+ INVALIDATE (s, " 2147483647" , " " , " maximum" , " " ); // int max
492
+ INVALIDATE (s, " 2147483648" , " " , " maximum" , " " ); // unsigned first
493
+ INVALIDATE (s, " 4294967296" , " " , " maximum" , " " ); // unsigned max
494
+ INVALIDATE (s, " 9223372036854775808" , " " , " maximum" , " " );
495
+ INVALIDATE (s, " 18446744073709551614" , " " , " maximum" , " " );
496
+ INVALIDATE (s, " 18446744073709551615" , " " , " maximum" , " " );
425
497
}
426
498
427
499
TEST (SchemaValidator, Number_MultipleOf) {
0 commit comments