diff --git a/tests/tests-randomized/random-test-driver.c b/tests/tests-randomized/random-test-driver.c
index 242e55c..6be6d97 100644
--- a/tests/tests-randomized/random-test-driver.c
+++ b/tests/tests-randomized/random-test-driver.c
@@ -117,7 +117,7 @@
         if(enc.syntax == syntax) {
             int r = snprintf(dirname, sizeof(dirname), "%s/%s", top_dirname,
                              enc.dir_name);
-            if(r >= sizeof(dirname) - sizeof("filename.bin")) {
+            if(r < 0 || (size_t)r >= sizeof(dirname) - sizeof("filename.bin")) {
                 fprintf(stderr, "Too long filenames\n");
                 exit(EX_SOFTWARE);
             }
@@ -231,7 +231,7 @@
         for(;;) {
             er = asn_encode_to_buffer(
                 0, syntax, &asn_DEF_T, structure, buffer, buffer_size);
-            if(er.encoded == -1) {
+            if(er.encoded < 0) {
                 fprintf(stderr, "Encoded T into %zd bytes\n", er.encoded);
                 fprintf(stderr, "Structure %s:\n",
                         sizeof(ASN1_STR) > 60 ? "T" : ASN1_STR);
@@ -239,7 +239,7 @@
                 assert(er.encoded >= 0);
                 exit(EX_SOFTWARE);
             }
-            if(er.encoded > buffer_size && buffer == tmp_buffer) {
+            if((size_t)er.encoded > buffer_size && buffer == tmp_buffer) {
                 if(debug) {
                     fprintf(
                         stderr,
@@ -254,10 +254,10 @@
             }
             break;
         }
-        if(er.encoded > buffer_size) {
+        if((size_t)er.encoded > buffer_size) {
             fprintf(stderr, "Data %zd does not fit into buffer %zu\n",
                     er.encoded, buffer_size);
-            assert(er.encoded <= buffer_size);
+            assert((size_t)er.encoded <= buffer_size);
         }
 
         asn_dec_rval_t rval =
@@ -265,12 +265,12 @@
                        buffer, er.encoded);
         if(rval.code == RC_OK) {
             /* Everything's cool... or is it? Expecting a proper consumed */
-            if(rval.consumed != er.encoded) {
+            if((ssize_t)rval.consumed != er.encoded) {
                 fprintf(stderr, "Encoded into %zd, yet consumed %zu\n",
                         er.encoded, rval.consumed);
                 fprintf(stderr, "Original random structure:\n");
                 asn_fprint(stderr, &asn_DEF_T, structure);
-                assert(rval.consumed == er.encoded);
+                assert((ssize_t)rval.consumed == er.encoded);
                 exit(EX_SOFTWARE);
             }
         } else {
