forked from libre-chip/fayalite
		
	add test that SimValue can't be interned, since its PartialEq may ignore types
This commit is contained in:
		
							parent
							
								
									07725ab489
								
							
						
					
					
						commit
						e0c9939147
					
				
					 2 changed files with 193 additions and 0 deletions
				
			
		
							
								
								
									
										15
									
								
								crates/fayalite/tests/ui/simvalue_is_not_internable.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								crates/fayalite/tests/ui/simvalue_is_not_internable.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| // SPDX-License-Identifier: LGPL-3.0-or-later
 | ||||
| // See Notices.txt for copyright information
 | ||||
| 
 | ||||
| //! check that SimValue can't be interned, since equality may ignore types
 | ||||
| 
 | ||||
| use fayalite::{ | ||||
|     intern::{Intern, Interned}, | ||||
|     sim::value::SimValue, | ||||
| }; | ||||
| 
 | ||||
| fn f(v: SimValue<()>) -> Interned<SimValue<()>> { | ||||
|     Intern::intern_sized(v) | ||||
| } | ||||
| 
 | ||||
| fn main() {} | ||||
							
								
								
									
										178
									
								
								crates/fayalite/tests/ui/simvalue_is_not_internable.stderr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								crates/fayalite/tests/ui/simvalue_is_not_internable.stderr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,178 @@ | |||
| error[E0277]: `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:11:26 | ||||
|    | | ||||
| 11 | fn f(v: SimValue<()>) -> Interned<SimValue<()>> { | ||||
|    |                          ^^^^^^^^^^^^^^^^^^^^^^ `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `Cell<util::alternating_cell::State>`, which is required by `SimValue<()>: Sync` | ||||
|    = note: if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `fayalite::intern::Interned` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub struct Interned<T: ?Sized + 'static + Send + Sync> { | ||||
|    |                                                  ^^^^ required by this bound in `Interned` | ||||
| 
 | ||||
| error[E0277]: `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:11:26 | ||||
|    | | ||||
| 11 | fn f(v: SimValue<()>) -> Interned<SimValue<()>> { | ||||
|    |                          ^^^^^^^^^^^^^^^^^^^^^^ `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `UnsafeCell<value::SimValueInner<()>>`, which is required by `SimValue<()>: Sync` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `fayalite::intern::Interned` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub struct Interned<T: ?Sized + 'static + Send + Sync> { | ||||
|    |                                                  ^^^^ required by this bound in `Interned` | ||||
| 
 | ||||
| error[E0277]: the trait bound `SimValue<()>: Intern` is not satisfied | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:26 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     -------------------- ^ the trait `Hash` is not implemented for `SimValue<()>`, which is required by `SimValue<()>: Intern` | ||||
|    |     | | ||||
|    |     required by a bound introduced by this call | ||||
|    | | ||||
|    = help: the following other types implement trait `Intern`: | ||||
|              BitSlice | ||||
|              [T] | ||||
|              str | ||||
|    = note: required for `SimValue<()>` to implement `Intern` | ||||
| 
 | ||||
| error[E0277]: the trait bound `SimValue<()>: Intern` is not satisfied | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:26 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     -------------------- ^ the trait `std::cmp::Eq` is not implemented for `SimValue<()>`, which is required by `SimValue<()>: Intern` | ||||
|    |     | | ||||
|    |     required by a bound introduced by this call | ||||
|    | | ||||
|    = help: the following other types implement trait `Intern`: | ||||
|              BitSlice | ||||
|              [T] | ||||
|              str | ||||
|    = note: required for `SimValue<()>` to implement `Intern` | ||||
| 
 | ||||
| error[E0277]: `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:26 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     -------------------- ^ `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|    |     | | ||||
|    |     required by a bound introduced by this call | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `Cell<util::alternating_cell::State>`, which is required by `SimValue<()>: Sync` | ||||
|    = note: if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `intern_sized` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub trait Intern: Any + Send + Sync { | ||||
|    |                                ^^^^ required by this bound in `Intern::intern_sized` | ||||
|    |     fn intern(&self) -> Interned<Self>; | ||||
|    |     fn intern_sized(self) -> Interned<Self> | ||||
|    |        ------------ required by a bound in this associated function | ||||
| 
 | ||||
| error[E0277]: `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:26 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     -------------------- ^ `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|    |     | | ||||
|    |     required by a bound introduced by this call | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `UnsafeCell<value::SimValueInner<()>>`, which is required by `SimValue<()>: Sync` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `intern_sized` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub trait Intern: Any + Send + Sync { | ||||
|    |                                ^^^^ required by this bound in `Intern::intern_sized` | ||||
|    |     fn intern(&self) -> Interned<Self>; | ||||
|    |     fn intern_sized(self) -> Interned<Self> | ||||
|    |        ------------ required by a bound in this associated function | ||||
| 
 | ||||
| error[E0277]: `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:5 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     ^^^^^^^^^^^^^^^^^^^^^^^ `Cell<util::alternating_cell::State>` cannot be shared between threads safely | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `Cell<util::alternating_cell::State>`, which is required by `SimValue<()>: Sync` | ||||
|    = note: if you want to do aliasing and mutation between multiple threads, use `std::sync::RwLock` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `fayalite::intern::Interned` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub struct Interned<T: ?Sized + 'static + Send + Sync> { | ||||
|    |                                                  ^^^^ required by this bound in `Interned` | ||||
| 
 | ||||
| error[E0277]: `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|   --> tests/ui/simvalue_is_not_internable.rs:12:5 | ||||
|    | | ||||
| 12 |     Intern::intern_sized(v) | ||||
|    |     ^^^^^^^^^^^^^^^^^^^^^^^ `UnsafeCell<value::SimValueInner<()>>` cannot be shared between threads safely | ||||
|    | | ||||
|    = help: within `SimValue<()>`, the trait `Sync` is not implemented for `UnsafeCell<value::SimValueInner<()>>`, which is required by `SimValue<()>: Sync` | ||||
| note: required because it appears within the type `util::alternating_cell::AlternatingCell<value::SimValueInner<()>>` | ||||
|   --> src/util/alternating_cell.rs | ||||
|    | | ||||
|    | pub(crate) struct AlternatingCell<T: ?Sized> { | ||||
|    |                   ^^^^^^^^^^^^^^^ | ||||
| note: required because it appears within the type `SimValue<()>` | ||||
|   --> src/sim/value.rs | ||||
|    | | ||||
|    | pub struct SimValue<T: Type> { | ||||
|    |            ^^^^^^^^ | ||||
| note: required by a bound in `fayalite::intern::Interned` | ||||
|   --> src/intern.rs | ||||
|    | | ||||
|    | pub struct Interned<T: ?Sized + 'static + Send + Sync> { | ||||
|    |                                                  ^^^^ required by this bound in `Interned` | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue