Skip to content

Commit dae0e6a

Browse files
committed
Add rules for the rest of insert's
1 parent 53590d2 commit dae0e6a

6 files changed

Lines changed: 282 additions & 0 deletions

File tree

‎rules/vector/src.cpp‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,17 @@ auto f114(std::vector<T1, T2> &o, Init<T1, Args> &&...args)
226226
-> decltype(o.emplace_back(std::forward<Args>(args)...)) {
227227
return o.emplace_back(std::forward<Args>(args)...);
228228
}
229+
230+
template <typename T1, typename T2 = std::allocator<T1>>
231+
typename std::vector<T1, T2>::iterator
232+
f115(std::vector<T1, T2> &o, typename std::vector<T1, T2>::const_iterator pos,
233+
std::size_t n, const T1 &value) {
234+
return o.insert(pos, n, value);
235+
}
236+
237+
template <typename T1, typename T2 = std::allocator<T1>>
238+
typename std::vector<T1, T2>::iterator
239+
f116(std::vector<T1, T2> &o, typename std::vector<T1, T2>::const_iterator pos,
240+
std::initializer_list<T1> l) {
241+
return o.insert(pos, l);
242+
}

‎rules/vector/tgt_refcount.rs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,3 +115,15 @@ fn f104<T1>(a0: Ptr<T1>) -> RandomAccessIterator<T1> {
115115
fn f105<T1: Clone + ByteRepr>(a0: Ptr<Vec<T1>>, a1: Vec<T1>) {
116116
a0.write(a1)
117117
}
118+
119+
fn f115<T1: Clone + ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: usize, a3: T1) -> RandomAccessIterator<T1> {
120+
let __off = a1.vec_ptr().get_offset();
121+
a0.splice(__off..__off, std::iter::repeat_n(a3, a2));
122+
a1
123+
}
124+
125+
fn f116<T1: ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: Vec<T1>) -> RandomAccessIterator<T1> {
126+
let __off = a1.vec_ptr().get_offset();
127+
a0.splice(__off..__off, a2);
128+
a1
129+
}

‎rules/vector/tgt_unsafe.rs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,3 +213,15 @@ unsafe fn f114<T1>(a0: &mut Vec<T1>, init: T1) {
213213
let __init = init;
214214
a0.push(__init)
215215
}
216+
217+
unsafe fn f115<T1: Clone>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: usize, a3: T1) -> UnsafeRandomAccessIterator<T1> {
218+
let __off = a1.vec_ptr().offset_from(a0.as_ptr()) as usize;
219+
a0.splice(__off..__off, std::iter::repeat_n(a3, a2));
220+
UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr().add(__off))
221+
}
222+
223+
unsafe fn f116<T1>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: Vec<T1>) -> UnsafeRandomAccessIterator<T1> {
224+
let __off = a1.vec_ptr().offset_from(a0.as_ptr()) as usize;
225+
a0.splice(__off..__off, a2);
226+
UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr().add(__off))
227+
}

‎tests/unit/out/refcount/vector.rs‎

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,113 @@ fn main_0() -> i32 {
8080
assert!(({ (*v2.borrow())[0_usize] } == 100));
8181
assert!(({ (*v2.borrow())[1_usize] } == 2));
8282
assert!(({ (*v2.borrow())[2_usize] } == 3));
83+
let mut x: i32 = 7;
84+
{
85+
let __off = <RandomAccessIterator<i32>>::from(
86+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
87+
)
88+
.vec_ptr()
89+
.get_offset();
90+
(*v2.borrow_mut()).insert(__off, x);
91+
<RandomAccessIterator<i32>>::from(
92+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
93+
)
94+
};
95+
assert!(((*v2.borrow()).len() == 4_usize));
96+
assert!(({ (*v2.borrow())[0_usize] } == 100));
97+
assert!(({ (*v2.borrow())[1_usize] } == 7));
98+
assert!(({ (*v2.borrow())[2_usize] } == 2));
99+
{
100+
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
101+
(v2.as_pointer() as Ptr<i32>).to_end(),
102+
))
103+
.vec_ptr()
104+
.get_offset();
105+
(*v2.borrow_mut()).splice(__off..__off, std::iter::repeat_n(9, 2_usize));
106+
<RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
107+
(v2.as_pointer() as Ptr<i32>).to_end(),
108+
))
109+
};
110+
assert!(((*v2.borrow()).len() == 6_usize));
111+
assert!(({ (*v2.borrow())[4_usize] } == 9));
112+
assert!(({ (*v2.borrow())[5_usize] } == 9));
113+
{
114+
let __off = <RandomAccessIterator<i32>>::from(
115+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(2_isize),
116+
)
117+
.vec_ptr()
118+
.get_offset();
119+
(*v2.borrow_mut()).splice(__off..__off, vec![11, 12, 13]);
120+
<RandomAccessIterator<i32>>::from(
121+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(2_isize),
122+
)
123+
};
124+
assert!(((*v2.borrow()).len() == 9_usize));
125+
assert!(({ (*v2.borrow())[1_usize] } == 7));
126+
assert!(({ (*v2.borrow())[2_usize] } == 11));
127+
assert!(({ (*v2.borrow())[3_usize] } == 12));
128+
assert!(({ (*v2.borrow())[4_usize] } == 13));
129+
assert!(({ (*v2.borrow())[5_usize] } == 2));
130+
assert!(({ (*v2.borrow())[8_usize] } == 9));
131+
let src: Value<Vec<i32>> = Rc::new(RefCell::new(vec![21, 22]));
132+
{
133+
let start_idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
134+
(v2.as_pointer() as Ptr<i32>),
135+
))
136+
.vec_ptr()
137+
.get_offset();
138+
let mut temp_vec: Vec<i32> = Vec::new();
139+
let mut __it = RandomAccessIterator::Vec((src.as_pointer() as Ptr<i32>));
140+
while __it != RandomAccessIterator::Vec((src.as_pointer() as Ptr<i32>).to_end()) {
141+
temp_vec.push(__it.iter_deref().read());
142+
__it.iter_inc();
143+
}
144+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|v: &mut Vec<i32>| {
145+
v.splice(start_idx..start_idx, temp_vec);
146+
});
147+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + start_idx)
148+
};
149+
assert!(((*v2.borrow()).len() == 11_usize));
150+
assert!(({ (*v2.borrow())[0_usize] } == 21));
151+
assert!(({ (*v2.borrow())[1_usize] } == 22));
152+
assert!(({ (*v2.borrow())[2_usize] } == 100));
153+
{
154+
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
155+
(v2.as_pointer() as Ptr<i32>),
156+
))
157+
.vec_ptr()
158+
.get_offset();
159+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
160+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
161+
};
162+
{
163+
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
164+
(v2.as_pointer() as Ptr<i32>),
165+
))
166+
.vec_ptr()
167+
.get_offset();
168+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
169+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
170+
};
171+
let mut i: i32 = 0;
172+
'loop_: while (i < 4) {
173+
{
174+
let idx = <RandomAccessIterator<i32>>::from(
175+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
176+
)
177+
.vec_ptr()
178+
.get_offset();
179+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
180+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
181+
};
182+
i.prefix_inc();
183+
}
184+
(*v2.borrow_mut()).pop();
185+
(*v2.borrow_mut()).pop();
186+
assert!(((*v2.borrow()).len() == 3_usize));
187+
assert!(({ (*v2.borrow())[0_usize] } == 100));
188+
assert!(({ (*v2.borrow())[1_usize] } == 2));
189+
assert!(({ (*v2.borrow())[2_usize] } == 3));
83190
let mut s2: usize = (*v2.borrow()).len();
84191
let v3: Value<Vec<i32>> = Rc::new(RefCell::new(vec![1; 100_usize as usize]));
85192
assert!(((*v3.borrow()).len() == 100_usize));

‎tests/unit/out/unsafe/vector.rs‎

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,109 @@ unsafe fn main_0() -> i32 {
8181
assert!(((v2[(0_usize)]) == (100)));
8282
assert!(((v2[(1_usize)]) == (2)));
8383
assert!(((v2[(2_usize)]) == (3)));
84+
let mut x: i32 = 7;
85+
{
86+
let pos = <UnsafeRandomAccessIterator<i32>>::from(
87+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()).iter_add(1_isize),
88+
)
89+
.vec_ptr()
90+
.offset_from(v2.as_ptr()) as usize;
91+
v2.insert(pos, x);
92+
<UnsafeRandomAccessIterator<i32>>::from(
93+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()).iter_add(1_isize),
94+
)
95+
};
96+
assert!(((v2.len()) == (4_usize)));
97+
assert!(((v2[(0_usize)]) == (100)));
98+
assert!(((v2[(1_usize)]) == (7)));
99+
assert!(((v2[(2_usize)]) == (2)));
100+
{
101+
let __off = <UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(
102+
v2.as_mut_ptr().add(v2.len()),
103+
))
104+
.vec_ptr()
105+
.offset_from(v2.as_ptr()) as usize;
106+
v2.splice(__off..__off, std::iter::repeat_n(9, 2_usize));
107+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr().add(__off))
108+
};
109+
assert!(((v2.len()) == (6_usize)));
110+
assert!(((v2[(4_usize)]) == (9)));
111+
assert!(((v2[(5_usize)]) == (9)));
112+
{
113+
let __off = <UnsafeRandomAccessIterator<i32>>::from(
114+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()).iter_add(2_isize),
115+
)
116+
.vec_ptr()
117+
.offset_from(v2.as_ptr()) as usize;
118+
v2.splice(__off..__off, vec![11, 12, 13]);
119+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr().add(__off))
120+
};
121+
assert!(((v2.len()) == (9_usize)));
122+
assert!(((v2[(1_usize)]) == (7)));
123+
assert!(((v2[(2_usize)]) == (11)));
124+
assert!(((v2[(3_usize)]) == (12)));
125+
assert!(((v2[(4_usize)]) == (13)));
126+
assert!(((v2[(5_usize)]) == (2)));
127+
assert!(((v2[(8_usize)]) == (9)));
128+
let mut src: Vec<i32> = vec![21, 22];
129+
{
130+
let __off = <UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(
131+
v2.as_mut_ptr(),
132+
))
133+
.vec_ptr()
134+
.offset_from(v2.as_ptr()) as usize;
135+
let mut __tmp = Vec::new();
136+
let mut __it = UnsafeRandomAccessIterator::Vec(src.as_mut_ptr());
137+
while __it != UnsafeRandomAccessIterator::Vec(src.as_mut_ptr().add(src.len())) {
138+
__tmp.push((*__it.iter_deref()).clone());
139+
__it.iter_inc();
140+
}
141+
v2.splice(__off..__off, __tmp);
142+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr().add(__off))
143+
};
144+
assert!(((v2.len()) == (11_usize)));
145+
assert!(((v2[(0_usize)]) == (21)));
146+
assert!(((v2[(1_usize)]) == (22)));
147+
assert!(((v2[(2_usize)]) == (100)));
148+
{
149+
let pos = <UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(
150+
v2.as_mut_ptr(),
151+
))
152+
.vec_ptr()
153+
.offset_from(v2.as_ptr()) as usize;
154+
v2.remove(pos);
155+
<UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()))
156+
};
157+
{
158+
let pos = <UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(
159+
v2.as_mut_ptr(),
160+
))
161+
.vec_ptr()
162+
.offset_from(v2.as_ptr()) as usize;
163+
v2.remove(pos);
164+
<UnsafeRandomAccessIterator<i32>>::from(UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()))
165+
};
166+
let mut i: i32 = 0;
167+
'loop_: while ((i) < (4)) {
168+
{
169+
let pos = <UnsafeRandomAccessIterator<i32>>::from(
170+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()).iter_add(1_isize),
171+
)
172+
.vec_ptr()
173+
.offset_from(v2.as_ptr()) as usize;
174+
v2.remove(pos);
175+
<UnsafeRandomAccessIterator<i32>>::from(
176+
UnsafeRandomAccessIterator::Vec(v2.as_mut_ptr()).iter_add(1_isize),
177+
)
178+
};
179+
i.prefix_inc();
180+
}
181+
v2.pop();
182+
v2.pop();
183+
assert!(((v2.len()) == (3_usize)));
184+
assert!(((v2[(0_usize)]) == (100)));
185+
assert!(((v2[(1_usize)]) == (2)));
186+
assert!(((v2[(2_usize)]) == (3)));
84187
let mut s2: usize = v2.len();
85188
let mut v3: Vec<i32> = vec![1; 100_usize as usize];
86189
assert!(((v3.len()) == (100_usize)));

‎tests/unit/vector.cpp‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,40 @@ int main() {
3939
assert(v2[0] == 100);
4040
assert(v2[1] == 2);
4141
assert(v2[2] == 3);
42+
int x = 7;
43+
v2.insert(v2.begin() + 1, x);
44+
assert(v2.size() == 4);
45+
assert(v2[0] == 100);
46+
assert(v2[1] == 7);
47+
assert(v2[2] == 2);
48+
v2.insert(v2.end(), 2, 9);
49+
assert(v2.size() == 6);
50+
assert(v2[4] == 9);
51+
assert(v2[5] == 9);
52+
v2.insert(v2.begin() + 2, {11, 12, 13});
53+
assert(v2.size() == 9);
54+
assert(v2[1] == 7);
55+
assert(v2[2] == 11);
56+
assert(v2[3] == 12);
57+
assert(v2[4] == 13);
58+
assert(v2[5] == 2);
59+
assert(v2[8] == 9);
60+
std::vector<int> src{21, 22};
61+
v2.insert(v2.begin(), src.begin(), src.end());
62+
assert(v2.size() == 11);
63+
assert(v2[0] == 21);
64+
assert(v2[1] == 22);
65+
assert(v2[2] == 100);
66+
v2.erase(v2.begin());
67+
v2.erase(v2.begin());
68+
for (int i = 0; i < 4; ++i)
69+
v2.erase(v2.begin() + 1);
70+
v2.pop_back();
71+
v2.pop_back();
72+
assert(v2.size() == 3);
73+
assert(v2[0] == 100);
74+
assert(v2[1] == 2);
75+
assert(v2[2] == 3);
4276
auto s2 = v2.size();
4377
std::vector<int> v3(100, 1);
4478
assert(v3.size() == 100);

0 commit comments

Comments
 (0)