diff options
| author | Kivooeo <Kivooeo123@gmail.com> | 2025-07-24 18:29:09 +0500 |
|---|---|---|
| committer | Kivooeo <Kivooeo123@gmail.com> | 2025-07-25 15:34:28 +0500 |
| commit | 90bb5cacb5c1a5fe20ba821d28e7eb7a21e35d09 (patch) | |
| tree | fa18c4e8fc12592084b8d16f71a8838e44a116ac /tests/ui/drop/struct-field-drop-order.rs | |
| parent | 3c30dbbe31bfbf6029f4534170165ba573ff0fd1 (diff) | |
| download | rust-90bb5cacb5c1a5fe20ba821d28e7eb7a21e35d09.tar.gz rust-90bb5cacb5c1a5fe20ba821d28e7eb7a21e35d09.zip | |
moved 34 tests to organized locations
Diffstat (limited to 'tests/ui/drop/struct-field-drop-order.rs')
| -rw-r--r-- | tests/ui/drop/struct-field-drop-order.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tests/ui/drop/struct-field-drop-order.rs b/tests/ui/drop/struct-field-drop-order.rs new file mode 100644 index 00000000000..cfdba5fda35 --- /dev/null +++ b/tests/ui/drop/struct-field-drop-order.rs @@ -0,0 +1,67 @@ +//@ run-pass +#![allow(non_snake_case)] + +use std::rc::Rc; +use std::cell::Cell; + +struct Field { + number: usize, + state: Rc<Cell<usize>> +} + +impl Field { + fn new(number: usize, state: Rc<Cell<usize>>) -> Field { + Field { + number: number, + state: state + } + } +} + +impl Drop for Field { + fn drop(&mut self) { + println!("Dropping field {}", self.number); + assert_eq!(self.state.get(), self.number); + self.state.set(self.state.get()+1); + } +} + +struct NoDropImpl { + _one: Field, + _two: Field, + _three: Field +} + +struct HasDropImpl { + _one: Field, + _two: Field, + _three: Field +} + +impl Drop for HasDropImpl { + fn drop(&mut self) { + println!("HasDropImpl.drop()"); + assert_eq!(self._one.state.get(), 0); + self._one.state.set(1); + } +} + +pub fn main() { + let state = Rc::new(Cell::new(1)); + let noImpl = NoDropImpl { + _one: Field::new(1, state.clone()), + _two: Field::new(2, state.clone()), + _three: Field::new(3, state.clone()) + }; + drop(noImpl); + assert_eq!(state.get(), 4); + + state.set(0); + let hasImpl = HasDropImpl { + _one: Field::new(1, state.clone()), + _two: Field::new(2, state.clone()), + _three: Field::new(3, state.clone()) + }; + drop(hasImpl); + assert_eq!(state.get(), 4); +} |
