]> git.lizzy.rs Git - rust.git/commitdiff
Add tests, improve test coverage
authorDavid Cook <divergentdave@gmail.com>
Sun, 5 Apr 2020 19:55:57 +0000 (14:55 -0500)
committerDavid Cook <divergentdave@gmail.com>
Sun, 5 Apr 2020 19:55:57 +0000 (14:55 -0500)
tests/compile-fail/libc_pthread_mutex_destroy_locked.rs [new file with mode: 0644]
tests/compile-fail/libc_pthread_mutex_normal_unlock_unlocked.rs [new file with mode: 0644]
tests/compile-fail/libc_pthread_rwlock_destroy_read_locked.rs [new file with mode: 0644]
tests/compile-fail/libc_pthread_rwlock_destroy_write_locked.rs [new file with mode: 0644]
tests/compile-fail/libc_pthread_rwlock_unlock_unlocked.rs [new file with mode: 0644]
tests/run-pass/libc.rs

diff --git a/tests/compile-fail/libc_pthread_mutex_destroy_locked.rs b/tests/compile-fail/libc_pthread_mutex_destroy_locked.rs
new file mode 100644 (file)
index 0000000..e7ed8ad
--- /dev/null
@@ -0,0 +1,16 @@
+// ignore-windows: No libc on Windows
+
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+    unsafe {
+        let mut mutexattr: libc::pthread_mutexattr_t = std::mem::zeroed();
+        assert_eq!(libc::pthread_mutexattr_settype(&mut mutexattr as *mut _, libc::PTHREAD_MUTEX_NORMAL), 0);
+        let mut mutex: libc::pthread_mutex_t = std::mem::zeroed();
+        assert_eq!(libc::pthread_mutex_init(&mut mutex as *mut _, &mutexattr as *const _), 0);
+        assert_eq!(libc::pthread_mutex_lock(&mut mutex as *mut _), 0);
+        libc::pthread_mutex_destroy(&mut mutex as *mut _); //~ ERROR destroyed a locked mutex
+    }
+}
diff --git a/tests/compile-fail/libc_pthread_mutex_normal_unlock_unlocked.rs b/tests/compile-fail/libc_pthread_mutex_normal_unlock_unlocked.rs
new file mode 100644 (file)
index 0000000..65de624
--- /dev/null
@@ -0,0 +1,17 @@
+// ignore-windows: No libc on Windows
+
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+    unsafe {
+        let mut mutexattr: libc::pthread_mutexattr_t = std::mem::zeroed();
+        assert_eq!(libc::pthread_mutexattr_settype(&mut mutexattr as *mut _, libc::PTHREAD_MUTEX_NORMAL), 0);
+        let mut mutex: libc::pthread_mutex_t = std::mem::zeroed();
+        assert_eq!(libc::pthread_mutex_init(&mut mutex as *mut _, &mutexattr as *const _), 0);
+        assert_eq!(libc::pthread_mutex_lock(&mut mutex as *mut _), 0);
+        assert_eq!(libc::pthread_mutex_unlock(&mut mutex as *mut _), 0);
+        libc::pthread_mutex_unlock(&mut mutex as *mut _); //~ ERROR was not locked
+    }
+}
diff --git a/tests/compile-fail/libc_pthread_rwlock_destroy_read_locked.rs b/tests/compile-fail/libc_pthread_rwlock_destroy_read_locked.rs
new file mode 100644 (file)
index 0000000..8750a73
--- /dev/null
@@ -0,0 +1,13 @@
+// ignore-windows: No libc on Windows
+
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+    let rw = std::cell::UnsafeCell::new(libc::PTHREAD_RWLOCK_INITIALIZER);
+    unsafe {
+        assert_eq!(libc::pthread_rwlock_rdlock(rw.get()), 0);
+        libc::pthread_rwlock_destroy(rw.get()); //~ ERROR destroyed a locked rwlock
+    }
+}
diff --git a/tests/compile-fail/libc_pthread_rwlock_destroy_write_locked.rs b/tests/compile-fail/libc_pthread_rwlock_destroy_write_locked.rs
new file mode 100644 (file)
index 0000000..aecccfa
--- /dev/null
@@ -0,0 +1,13 @@
+// ignore-windows: No libc on Windows
+
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+    let rw = std::cell::UnsafeCell::new(libc::PTHREAD_RWLOCK_INITIALIZER);
+    unsafe {
+        assert_eq!(libc::pthread_rwlock_wrlock(rw.get()), 0);
+        libc::pthread_rwlock_destroy(rw.get()); //~ ERROR destroyed a locked rwlock
+    }
+}
diff --git a/tests/compile-fail/libc_pthread_rwlock_unlock_unlocked.rs b/tests/compile-fail/libc_pthread_rwlock_unlock_unlocked.rs
new file mode 100644 (file)
index 0000000..8b3de53
--- /dev/null
@@ -0,0 +1,12 @@
+// ignore-windows: No libc on Windows
+
+#![feature(rustc_private)]
+
+extern crate libc;
+
+fn main() {
+    let rw = std::cell::UnsafeCell::new(libc::PTHREAD_RWLOCK_INITIALIZER);
+    unsafe {
+        libc::pthread_rwlock_unlock(rw.get()); //~ ERROR was not locked
+    }
+}
index c930a034b130bd02d93e1e87e653f5ba9cefe558..a449d9340a315c5c8ab07e7203c7361b1dc87128 100644 (file)
@@ -15,7 +15,7 @@ fn tmp() -> PathBuf {
 #[cfg(not(target_os = "macos"))]
 fn test_posix_fadvise() {
     use std::convert::TryInto;
-    use std::fs::{File, remove_file};
+    use std::fs::{remove_file, File};
     use std::io::Write;
     use std::os::unix::io::AsRawFd;
 
@@ -66,6 +66,7 @@ fn test_mutex_libc_init_recursive() {
 fn test_mutex_libc_init_normal() {
     unsafe {
         let mut mutexattr: libc::pthread_mutexattr_t = std::mem::zeroed();
+        assert_eq!(libc::pthread_mutexattr_settype(&mut mutexattr as *mut _, 0x12345678), libc::EINVAL);
         assert_eq!(libc::pthread_mutexattr_settype(&mut mutexattr as *mut _, libc::PTHREAD_MUTEX_NORMAL), 0);
         let mut mutex: libc::pthread_mutex_t = std::mem::zeroed();
         assert_eq!(libc::pthread_mutex_init(&mut mutex as *mut _, &mutexattr as *const _), 0);
@@ -133,6 +134,11 @@ fn test_rwlock_libc_static_initializer() {
         assert_eq!(libc::pthread_rwlock_trywrlock(rw.get()), libc::EBUSY);
         assert_eq!(libc::pthread_rwlock_unlock(rw.get()), 0);
 
+        assert_eq!(libc::pthread_rwlock_trywrlock(rw.get()), 0);
+        assert_eq!(libc::pthread_rwlock_tryrdlock(rw.get()), libc::EBUSY);
+        assert_eq!(libc::pthread_rwlock_trywrlock(rw.get()), libc::EBUSY);
+        assert_eq!(libc::pthread_rwlock_unlock(rw.get()), 0);
+
         assert_eq!(libc::pthread_rwlock_destroy(rw.get()), 0);
     }
 }