Skip to content

Commit 1f4669d

Browse files
committed
Add construct/destruct test for scalar values
1 parent 7648bfb commit 1f4669d

3 files changed

Lines changed: 90 additions & 0 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
extern crate libcc2rs;
2+
use libcc2rs::*;
3+
use std::cell::RefCell;
4+
use std::collections::BTreeMap;
5+
use std::io::prelude::*;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::AsFd;
8+
use std::rc::{Rc, Weak};
9+
pub fn zero_0() -> Ptr<i32> {
10+
return Ptr::<i32>::null();
11+
}
12+
pub fn zero_1() -> i64 {
13+
return <i64>::default();
14+
}
15+
pub fn destroy_2(p: Ptr<i32>) {
16+
let p: Value<Ptr<i32>> = Rc::new(RefCell::new(p));
17+
}
18+
pub fn main() {
19+
std::process::exit(main_0());
20+
}
21+
fn main_0() -> i32 {
22+
let i: Value<i32> = Rc::new(RefCell::new(<i32>::default()));
23+
let d: Value<f64> = Rc::new(RefCell::new(<f64>::default()));
24+
let p: Value<Ptr<i32>> = Rc::new(RefCell::new(({ zero_0() })));
25+
assert!(((*i.borrow()) == 0));
26+
assert!(((*d.borrow()) == 0.0E+0));
27+
assert!((*p.borrow()).is_null());
28+
assert!((({ zero_1() }) == 0_i64));
29+
let x: Value<i32> = Rc::new(RefCell::new(5));
30+
({ destroy_2((x.as_pointer())) });
31+
i32;
32+
assert!(((*x.borrow()) == 5));
33+
return 0;
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
extern crate libc;
2+
use libc::*;
3+
extern crate libcc2rs;
4+
use libcc2rs::*;
5+
use std::collections::BTreeMap;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
8+
use std::rc::Rc;
9+
pub unsafe fn zero_0() -> *mut i32 {
10+
return std::ptr::null_mut();
11+
}
12+
pub unsafe fn zero_1() -> i64 {
13+
return 0_i64;
14+
}
15+
pub unsafe fn destroy_2(mut p: *mut i32) {}
16+
pub fn main() {
17+
unsafe {
18+
std::process::exit(main_0() as i32);
19+
}
20+
}
21+
unsafe fn main_0() -> i32 {
22+
let mut i: i32 = 0_i32;
23+
let mut d: f64 = 0.0_f64;
24+
let mut p: *mut i32 = (unsafe { zero_0() });
25+
assert!(((i) == (0)));
26+
assert!(((d) == (0.0E+0)));
27+
assert!((p).is_null());
28+
assert!(((unsafe { zero_1() }) == (0_i64)));
29+
let mut x: i32 = 5;
30+
(unsafe { destroy_2((&mut x as *mut i32)) });
31+
i32;
32+
assert!(((x) == (5)));
33+
return 0;
34+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <cassert>
2+
3+
template <typename T> T zero() { return T(); }
4+
5+
template <typename T> void destroy(T *p) { p->~T(); }
6+
7+
int main() {
8+
int i = int();
9+
double d = double{};
10+
int *p = zero<int *>();
11+
assert(i == 0);
12+
assert(d == 0.0);
13+
assert(p == nullptr);
14+
assert(zero<long>() == 0);
15+
16+
int x = 5;
17+
destroy(&x);
18+
using I = int;
19+
x.~I();
20+
assert(x == 5);
21+
return 0;
22+
}

0 commit comments

Comments
 (0)