| 885 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
885 CX_TEST_ASSERT(cx_testing_allocator_verify(&talloc)); |
| 886 } |
886 } |
| 887 cx_testing_allocator_destroy(&talloc); |
887 cx_testing_allocator_destroy(&talloc); |
| 888 } |
888 } |
| 889 |
889 |
| |
890 CX_TEST(test_json_write_frac_max_digits) { |
| |
891 CxJsonValue* num = cxJsonCreateNumber(NULL, 3.141592653589793); |
| |
892 CxJsonWriter writer = cxJsonWriterCompact(); |
| |
893 CxBuffer buf; |
| |
894 cxBufferInit(&buf, NULL, 32, NULL, 0); |
| |
895 CX_TEST_DO { |
| |
896 // test default settings (6 digits) |
| |
897 cxJsonWrite(&buf,num, cxBufferWriteFunc, &writer); |
| |
898 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592"))); |
| |
899 |
| |
900 // test too many digits |
| |
901 cxBufferReset(&buf); |
| |
902 writer.frac_max_digits = 200; |
| |
903 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
904 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141592653589793"))); |
| |
905 |
| |
906 // test 0 digits |
| |
907 cxBufferReset(&buf); |
| |
908 writer.frac_max_digits = 0; |
| |
909 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
910 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3"))); |
| |
911 |
| |
912 // test 2 digits |
| |
913 cxBufferReset(&buf); |
| |
914 writer.frac_max_digits = 2; |
| |
915 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
916 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.14"))); |
| |
917 |
| |
918 // test 3 digits |
| |
919 cxBufferReset(&buf); |
| |
920 writer.frac_max_digits = 3; |
| |
921 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
922 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("3.141"))); |
| |
923 |
| |
924 // test 6 digits, but two are left of the decimal point |
| |
925 num->value.number = 47.110815; |
| |
926 cxBufferReset(&buf); |
| |
927 writer.frac_max_digits = 6; |
| |
928 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
929 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("47.110815"))); |
| |
930 |
| |
931 // test 4 digits with exponent |
| |
932 num->value.number = 5.11223344e23; |
| |
933 cxBufferReset(&buf); |
| |
934 writer.frac_max_digits = 4; |
| |
935 cxJsonWrite(&buf, num, cxBufferWriteFunc, &writer); |
| |
936 CX_TEST_ASSERT(0 == cx_strcmp(cx_strn(buf.space, buf.size), CX_STR("5.1122e+23"))); |
| |
937 } |
| |
938 cxBufferDestroy(&buf); |
| |
939 cxJsonValueFree(num); |
| |
940 } |
| |
941 |
| 890 CxTestSuite *cx_test_suite_json(void) { |
942 CxTestSuite *cx_test_suite_json(void) { |
| 891 CxTestSuite *suite = cx_test_suite_new("json"); |
943 CxTestSuite *suite = cx_test_suite_new("json"); |
| 892 |
944 |
| 893 cx_test_register(suite, test_json_init_default); |
945 cx_test_register(suite, test_json_init_default); |
| 894 cx_test_register(suite, test_json_simple_object); |
946 cx_test_register(suite, test_json_simple_object); |
| 907 cx_test_register(suite, test_json_create_value); |
959 cx_test_register(suite, test_json_create_value); |
| 908 cx_test_register(suite, test_json_write_default_format); |
960 cx_test_register(suite, test_json_write_default_format); |
| 909 cx_test_register(suite, test_json_write_pretty_default_spaces); |
961 cx_test_register(suite, test_json_write_pretty_default_spaces); |
| 910 cx_test_register(suite, test_json_write_pretty_default_tabs); |
962 cx_test_register(suite, test_json_write_pretty_default_tabs); |
| 911 cx_test_register(suite, test_json_write_pretty_preserve_order); |
963 cx_test_register(suite, test_json_write_pretty_preserve_order); |
| |
964 cx_test_register(suite, test_json_write_frac_max_digits); |
| 912 |
965 |
| 913 return suite; |
966 return suite; |
| 914 } |
967 } |
| 915 |
968 |