summaryrefslogtreecommitdiffstats
path: root/test/integer_set.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2023-01-16 04:25:52 +0100
committerGravatar Nikias Bassen2023-01-16 04:25:52 +0100
commitd886885b0ec2506fa2caf0986a3d0e496fea91c2 (patch)
tree58bc4bcd1963ea885abd60a65bf87a2685526714 /test/integer_set.c
parent47a7fbe438ee7350a2b151e007f07043ef596775 (diff)
downloadlibplist-d886885b0ec2506fa2caf0986a3d0e496fea91c2.tar.gz
libplist-d886885b0ec2506fa2caf0986a3d0e496fea91c2.tar.bz2
Rename PLIST_UINT to PLIST_INT and add plist_new_int() and plist_get_int_val()
This properly supports getting and setting signed or unsigned integer values. Also, a new helper function plist_int_val_is_negative() was added to determine if a given #PLIST_INT node has a negative value or not. The old type PLIST_UINT is defined as a macro with the value of PLIST_INT for backwards compatibility. This commit also adds int vs. uint support to the C++ interface, and the python bindings in a hopefully useful way.
Diffstat (limited to 'test/integer_set.c')
-rw-r--r--test/integer_set.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/test/integer_set.c b/test/integer_set.c
new file mode 100644
index 0000000..e25648f
--- /dev/null
+++ b/test/integer_set.c
@@ -0,0 +1,130 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdlib.h>
+
+#include <string.h>
+#include <plist/plist.h>
+
+void print_plist(plist_t pl)
+{
+ char *xml = NULL;
+ uint32_t xlen = 0;
+ plist_to_xml(pl, &xml, &xlen);
+ if (xml) {
+ printf("%s\n", xml);
+ }
+ free(xml);
+}
+
+int main(int argc, char** argv)
+{
+ int err = 0;
+ char *xml = NULL;
+ uint32_t xlen = 0;
+ plist_t iii = plist_new_int(0);
+
+ /* test 1 */
+ plist_set_uint_val(iii, 0x8000000000000000LL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>9223372036854775808</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match1) != 0) {
+ printf("ERROR: plist_set_uint_val with 0x8000000000000000LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_uint_val with 0x8000000000000000LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ /* test 2 */
+ plist_set_int_val(iii, 0x8000000000000000LL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>-9223372036854775808</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match2) != 0) {
+ printf("ERROR: plist_set_int_val with 0x8000000000000000LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_int_val with 0x8000000000000000LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ /* test 3 */
+ plist_set_uint_val(iii, (uint64_t)-1LL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>18446744073709551615</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match3) != 0) {
+ printf("ERROR: plist_set_uint_val with (uint64_t)-1LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_uint_val with (uint64_t)-1LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ /* test 4 */
+ plist_set_int_val(iii, -1LL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match4 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>-1</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match4) != 0) {
+ printf("ERROR: plist_set_int_val with -1LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_int_val with -1LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ /* test 5 */
+ plist_set_uint_val(iii, 0x8000000000000001LL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match5 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>9223372036854775809</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match5) != 0) {
+ printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ /* test 6 */
+ plist_set_uint_val(iii, 18446744073709551615uLL);
+ plist_to_xml(iii, &xml, &xlen);
+ const char* match6 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
+ "<plist version=\"1.0\">\n"
+ "<integer>18446744073709551615</integer>\n"
+ "</plist>\n";
+ if (strcmp(xml, match6) != 0) {
+ printf("ERROR: plist_set_uint_val with 0x8000000000000001LL failed\n");
+ err++;
+ } else {
+ printf("SUCCESS: plist_set_uint_val with 0x8000000000000001LL\n");
+ }
+ free(xml);
+ xml = NULL;
+
+ return (err > 0) ? EXIT_FAILURE : EXIT_SUCCESS;
+}