Skip to content

Commit 6d484b8

Browse files
committed
Add pre-commit tests
1 parent 6849e2c commit 6d484b8

3 files changed

Lines changed: 207 additions & 0 deletions

File tree

tests/unit/class_templates.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <cassert>
2+
#include <vector>
3+
4+
template <typename T> class MyContainer {
5+
std::vector<T> vec;
6+
7+
public:
8+
using value_type = T;
9+
using reference = T &;
10+
using const_reference = const T &;
11+
using size_type = std::size_t;
12+
13+
bool empty() const { return vec.empty(); }
14+
size_type size() const { return vec.size(); }
15+
const_reference back() const { return vec.back(); }
16+
reference back() { return vec.back(); }
17+
void pop_back() { return vec.pop_back(); }
18+
void push_back(const_reference item) { vec.push_back(item); }
19+
};
20+
21+
int main() {
22+
MyContainer<int> imc;
23+
assert(imc.empty());
24+
imc.push_back(1);
25+
assert(imc.size() == 1 && imc.back() == 1);
26+
imc.pop_back();
27+
assert(imc.empty());
28+
29+
MyContainer<char> cmc;
30+
assert(cmc.empty());
31+
cmc.push_back('a');
32+
assert(cmc.size() == 1 && cmc.back() == 'a');
33+
cmc.pop_back();
34+
assert(cmc.empty());
35+
36+
MyContainer<float> fmc;
37+
assert(fmc.empty());
38+
fmc.push_back('a');
39+
assert(fmc.size() == 1 && fmc.back() == 'a');
40+
fmc.pop_back();
41+
assert(fmc.empty());
42+
return 0;
43+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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+
#[derive(Default)]
10+
pub struct MyContainer {
11+
vec_: Value<Vec<i32>>,
12+
}
13+
impl MyContainer {
14+
pub fn empty(&self) -> bool {
15+
return (*self.vec_.borrow()).is_empty();
16+
}
17+
pub fn size(&self) -> usize {
18+
return (*self.vec_.borrow()).len();
19+
}
20+
pub fn back_const(&self) -> Ptr<i32> {
21+
return (self.vec_.as_pointer() as Ptr<i32>).to_last();
22+
}
23+
pub fn back(&self) -> Ptr<i32> {
24+
return (self.vec_.as_pointer() as Ptr<i32>).to_last();
25+
}
26+
pub fn pop_back(&self) {
27+
(*self.vec_.borrow_mut()).pop();
28+
return;
29+
}
30+
pub fn push_back(&self, item: Ptr<i32>) {
31+
{
32+
let a0_clone = (item.read()).clone();
33+
(*self.vec_.borrow_mut()).push(a0_clone)
34+
};
35+
}
36+
}
37+
impl Clone for MyContainer {
38+
fn clone(&self) -> Self {
39+
let mut this = Self {
40+
vec_: Rc::new(RefCell::new((*self.vec_.borrow()).clone())),
41+
};
42+
this
43+
}
44+
}
45+
impl ByteRepr for MyContainer {}
46+
pub fn main() {
47+
std::process::exit(main_0());
48+
}
49+
fn main_0() -> i32 {
50+
let imc: Value<MyContainer> = Rc::new(RefCell::new(<MyContainer>::default()));
51+
assert!(({ (*imc.borrow()).empty() }));
52+
({
53+
let _item: Value<i32> = Rc::new(RefCell::new(1));
54+
(*imc.borrow()).push_back(_item.as_pointer())
55+
});
56+
assert!(
57+
(({ (*imc.borrow()).size() }) == 1_usize) && ((({ (*imc.borrow()).back() }).read()) == 1)
58+
);
59+
({ (*imc.borrow()).pop_back() });
60+
assert!(({ (*imc.borrow()).empty() }));
61+
let cmc: Value<MyContainer> = Rc::new(RefCell::new(<MyContainer>::default()));
62+
assert!(({ (*cmc.borrow()).empty() }));
63+
({
64+
let _item: Value<u8> = Rc::new(RefCell::new(('a' as u8)));
65+
(*cmc.borrow()).push_back(_item.as_pointer())
66+
});
67+
assert!(
68+
(({ (*cmc.borrow()).size() }) == 1_usize)
69+
&& (((({ (*cmc.borrow()).back() }).read()) as i32) == (('a' as u8) as i32))
70+
);
71+
({ (*cmc.borrow()).pop_back() });
72+
assert!(({ (*cmc.borrow()).empty() }));
73+
let fmc: Value<MyContainer> = Rc::new(RefCell::new(<MyContainer>::default()));
74+
assert!(({ (*fmc.borrow()).empty() }));
75+
({
76+
let _item: Value<f32> = Rc::new(RefCell::new((('a' as u8) as f32)));
77+
(*fmc.borrow()).push_back(_item.as_pointer())
78+
});
79+
assert!(
80+
(({ (*fmc.borrow()).size() }) == 1_usize)
81+
&& ((({ (*fmc.borrow()).back() }).read()) == ((('a' as u8) as i32) as f32))
82+
);
83+
({ (*fmc.borrow()).pop_back() });
84+
assert!(({ (*fmc.borrow()).empty() }));
85+
return 0;
86+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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+
#[repr(C)]
10+
#[derive(Clone, Default)]
11+
pub struct MyContainer {
12+
vec_: Vec<i32>,
13+
}
14+
impl MyContainer {
15+
pub unsafe fn empty(&self) -> bool {
16+
return self.vec_.is_empty();
17+
}
18+
pub unsafe fn size(&self) -> usize {
19+
return self.vec_.len();
20+
}
21+
pub unsafe fn back_const(&self) -> *const i32 {
22+
return ((self.vec_).last().unwrap());
23+
}
24+
pub unsafe fn back(&mut self) -> *mut i32 {
25+
return ((self.vec_).last_mut().unwrap());
26+
}
27+
pub unsafe fn pop_back(&mut self) {
28+
self.vec_.pop();
29+
return;
30+
}
31+
pub unsafe fn push_back(&mut self, item: *const i32) {
32+
{
33+
let a0_clone = (*item).clone();
34+
self.vec_.push(a0_clone)
35+
};
36+
}
37+
}
38+
pub fn main() {
39+
unsafe {
40+
std::process::exit(main_0() as i32);
41+
}
42+
}
43+
unsafe fn main_0() -> i32 {
44+
let mut imc: MyContainer = <MyContainer>::default();
45+
assert!((unsafe { imc.empty() }));
46+
(unsafe {
47+
let mut _item = 1;
48+
imc.push_back(&mut _item)
49+
});
50+
assert!(((unsafe { imc.size() }) == (1_usize)) && ((*(unsafe { imc.back() })) == (1)));
51+
(unsafe { imc.pop_back() });
52+
assert!((unsafe { imc.empty() }));
53+
let mut cmc: MyContainer = <MyContainer>::default();
54+
assert!((unsafe { cmc.empty() }));
55+
(unsafe {
56+
let mut _item = ('a' as u8);
57+
cmc.push_back(&mut _item)
58+
});
59+
assert!(
60+
((unsafe { cmc.size() }) == (1_usize))
61+
&& (((*(unsafe { cmc.back() })) as i32) == (('a' as u8) as i32))
62+
);
63+
(unsafe { cmc.pop_back() });
64+
assert!((unsafe { cmc.empty() }));
65+
let mut fmc: MyContainer = <MyContainer>::default();
66+
assert!((unsafe { fmc.empty() }));
67+
(unsafe {
68+
let mut _item = (('a' as u8) as f32);
69+
fmc.push_back(&mut _item)
70+
});
71+
assert!(
72+
((unsafe { fmc.size() }) == (1_usize))
73+
&& ((*(unsafe { fmc.back() })) == ((('a' as u8) as i32) as f32))
74+
);
75+
(unsafe { fmc.pop_back() });
76+
assert!((unsafe { fmc.empty() }));
77+
return 0;
78+
}

0 commit comments

Comments
 (0)