@@ -117,11 +117,131 @@ pub fn operator_lt_7(a: i32, b: Ptr<S>) -> bool {
117117 _lhs < ( * ( * b. upgrade ( ) . deref ( ) ) . v . borrow ( ) )
118118 } ;
119119}
120+ #[ derive( Default ) ]
121+ pub struct V {
122+ pub v : Value < i32 > ,
123+ }
124+ impl std:: cmp:: Ord for V {
125+ fn cmp ( & self , other : & Self ) -> std:: cmp:: Ordering {
126+ {
127+ if operator_lt_8 (
128+ Rc :: new ( RefCell :: new ( V { v : self . v . clone ( ) } ) ) . as_pointer ( ) ,
129+ Rc :: new ( RefCell :: new ( V { v : other. v . clone ( ) } ) ) . as_pointer ( ) ,
130+ ) {
131+ std:: cmp:: Ordering :: Less
132+ } else if operator_lt_8 (
133+ Rc :: new ( RefCell :: new ( V { v : other. v . clone ( ) } ) ) . as_pointer ( ) ,
134+ Rc :: new ( RefCell :: new ( V { v : self . v . clone ( ) } ) ) . as_pointer ( ) ,
135+ ) {
136+ std:: cmp:: Ordering :: Greater
137+ } else {
138+ std:: cmp:: Ordering :: Equal
139+ }
140+ }
141+ }
142+ }
143+ impl std:: cmp:: PartialOrd for V {
144+ fn partial_cmp ( & self , other : & Self ) -> Option < std:: cmp:: Ordering > {
145+ Some ( self . cmp ( other) )
146+ }
147+ }
148+ impl std:: cmp:: PartialEq for V {
149+ fn eq ( & self , other : & Self ) -> bool {
150+ {
151+ operator_eq_9 (
152+ Rc :: new ( RefCell :: new ( V { v : self . v . clone ( ) } ) ) . as_pointer ( ) ,
153+ Rc :: new ( RefCell :: new ( V { v : other. v . clone ( ) } ) ) . as_pointer ( ) ,
154+ )
155+ }
156+ }
157+ }
158+ impl std:: cmp:: Eq for V { }
159+ impl Clone for V {
160+ fn clone ( & self ) -> Self {
161+ let __this: Value < V > = Rc :: new ( RefCell :: new ( Self {
162+ v : Rc :: new ( RefCell :: new ( ( * self . v . borrow ( ) ) ) ) ,
163+ } ) ) ;
164+ let this: Ptr < V > = __this. as_pointer ( ) ;
165+ Rc :: try_unwrap ( __this) . ok ( ) . unwrap ( ) . into_inner ( )
166+ }
167+ }
168+ impl ByteRepr for V {
169+ fn byte_size ( ) -> usize {
170+ 4
171+ }
172+ fn to_bytes ( & self , buf : & mut [ u8 ] ) {
173+ ( * self . v . borrow ( ) ) . to_bytes ( & mut buf[ 0 ..4 ] ) ;
174+ }
175+ fn from_bytes ( buf : & [ u8 ] ) -> Self {
176+ Self {
177+ v : Rc :: new ( RefCell :: new ( <i32 >:: from_bytes ( & buf[ 0 ..4 ] ) ) ) ,
178+ }
179+ }
180+ }
181+ pub fn operator_eq_9 ( a : V , b : V ) -> bool {
182+ let a: Value < V > = Rc :: new ( RefCell :: new ( a) ) ;
183+ let b: Value < V > = Rc :: new ( RefCell :: new ( b) ) ;
184+ return ( ( * ( * a. borrow ( ) ) . v . borrow ( ) ) == ( * ( * b. borrow ( ) ) . v . borrow ( ) ) ) ;
185+ }
186+ pub fn operator_ne_10 ( a : V , b : V ) -> bool {
187+ let a: Value < V > = Rc :: new ( RefCell :: new ( a) ) ;
188+ let b: Value < V > = Rc :: new ( RefCell :: new ( b) ) ;
189+ return ( ( * ( * a. borrow ( ) ) . v . borrow ( ) ) != ( * ( * b. borrow ( ) ) . v . borrow ( ) ) ) ;
190+ }
191+ pub fn operator_lt_8 ( a : V , b : V ) -> bool {
192+ let a: Value < V > = Rc :: new ( RefCell :: new ( a) ) ;
193+ let b: Value < V > = Rc :: new ( RefCell :: new ( b) ) ;
194+ return ( ( * ( * a. borrow ( ) ) . v . borrow ( ) ) < ( * ( * b. borrow ( ) ) . v . borrow ( ) ) ) ;
195+ }
196+ pub fn operator_gt_11 ( a : V , b : V ) -> bool {
197+ let a: Value < V > = Rc :: new ( RefCell :: new ( a) ) ;
198+ let b: Value < V > = Rc :: new ( RefCell :: new ( b) ) ;
199+ return ( ( * ( * a. borrow ( ) ) . v . borrow ( ) ) > ( * ( * b. borrow ( ) ) . v . borrow ( ) ) ) ;
200+ }
120201pub fn main ( ) {
121202 __cpp2rust_init_globals ( ) ;
122203 std:: process:: exit ( main_0 ( ) ) ;
123204}
124205fn main_0 ( ) -> i32 {
206+ let x: Value < V > = Rc :: new ( RefCell :: new ( V {
207+ v : Rc :: new ( RefCell :: new ( 1 ) ) ,
208+ } ) ) ;
209+ let y: Value < V > = Rc :: new ( RefCell :: new ( V {
210+ v : Rc :: new ( RefCell :: new ( 2 ) ) ,
211+ } ) ) ;
212+ let z: Value < V > = Rc :: new ( RefCell :: new ( V {
213+ v : Rc :: new ( RefCell :: new ( 1 ) ) ,
214+ } ) ) ;
215+ assert ! (
216+ ( {
217+ let _a: V = ( * x. borrow( ) ) . clone( ) ;
218+ operator_eq_9( _a, ( * z. borrow( ) ) . clone( ) )
219+ } )
220+ ) ;
221+ assert ! (
222+ ( {
223+ let _a: V = ( * x. borrow( ) ) . clone( ) ;
224+ operator_ne_10( _a, ( * y. borrow( ) ) . clone( ) )
225+ } )
226+ ) ;
227+ assert ! (
228+ ( {
229+ let _a: V = ( * x. borrow( ) ) . clone( ) ;
230+ operator_lt_8( _a, ( * y. borrow( ) ) . clone( ) )
231+ } )
232+ ) ;
233+ assert ! (
234+ ( {
235+ let _a: V = ( * y. borrow( ) ) . clone( ) ;
236+ operator_gt_11( _a, ( * x. borrow( ) ) . clone( ) )
237+ } )
238+ ) ;
239+ assert ! (
240+ !( {
241+ let _a: V = ( * y. borrow( ) ) . clone( ) ;
242+ operator_lt_8( _a, ( * x. borrow( ) ) . clone( ) )
243+ } )
244+ ) ;
125245 let a: Value < S > = Rc :: new ( RefCell :: new ( S {
126246 v : Rc :: new ( RefCell :: new ( 1 ) ) ,
127247 } ) ) ;
0 commit comments