test(tvix/value): add simple attrset construction tests
These do not yet test nested attribute sets; we need to add some more inspection primitives first. Change-Id: Icfc99bf17c73ebefc0d882a84f0ca73ec688a54d Reviewed-on: https://cl.tvl.fyi/c/depot/+/6110 Reviewed-by: eta <tvl@eta.st> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									08b4d65fbd
								
							
						
					
					
						commit
						c7ba2dec04
					
				
					 3 changed files with 62 additions and 0 deletions
				
			
		|  | @ -14,6 +14,9 @@ use crate::errors::{Error, EvalResult}; | ||||||
| use super::string::NixString; | use super::string::NixString; | ||||||
| use super::Value; | use super::Value; | ||||||
| 
 | 
 | ||||||
|  | #[cfg(test)] | ||||||
|  | mod tests; | ||||||
|  | 
 | ||||||
| #[derive(Clone, Debug)] | #[derive(Clone, Debug)] | ||||||
| pub enum NixAttrs { | pub enum NixAttrs { | ||||||
|     Empty, |     Empty, | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								tvix/eval/src/value/attrs/tests.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								tvix/eval/src/value/attrs/tests.rs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | ||||||
|  | use super::*; | ||||||
|  | 
 | ||||||
|  | #[test] | ||||||
|  | fn test_empty_attrs() { | ||||||
|  |     let attrs = NixAttrs::construct(0, vec![]).expect("empty attr construction should succeed"); | ||||||
|  | 
 | ||||||
|  |     assert!( | ||||||
|  |         matches!(attrs, NixAttrs::Empty), | ||||||
|  |         "empty attribute set should use optimised representation" | ||||||
|  |     ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[test] | ||||||
|  | fn test_simple_attrs() { | ||||||
|  |     let attrs = NixAttrs::construct( | ||||||
|  |         1, | ||||||
|  |         vec![Value::String("key".into()), Value::String("value".into())], | ||||||
|  |     ) | ||||||
|  |     .expect("simple attr construction should succeed"); | ||||||
|  | 
 | ||||||
|  |     assert!( | ||||||
|  |         matches!(attrs, NixAttrs::Map(_)), | ||||||
|  |         "simple attribute set should use map representation", | ||||||
|  |     ) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[test] | ||||||
|  | fn test_kv_attrs() { | ||||||
|  |     let name_val = Value::String("name".into()); | ||||||
|  |     let value_val = Value::String("value".into()); | ||||||
|  |     let meaning_val = Value::String("meaning".into()); | ||||||
|  |     let forty_two_val = Value::Integer(42); | ||||||
|  | 
 | ||||||
|  |     let kv_attrs = NixAttrs::construct( | ||||||
|  |         2, | ||||||
|  |         vec![ | ||||||
|  |             value_val.clone(), | ||||||
|  |             forty_two_val.clone(), | ||||||
|  |             name_val.clone(), | ||||||
|  |             meaning_val.clone(), | ||||||
|  |         ], | ||||||
|  |     ) | ||||||
|  |     .expect("constructing K/V pair attrs should succeed"); | ||||||
|  | 
 | ||||||
|  |     match kv_attrs { | ||||||
|  |         NixAttrs::KV { name, value } if name == meaning_val || value == forty_two_val => {} | ||||||
|  | 
 | ||||||
|  |         _ => panic!( | ||||||
|  |             "K/V attribute set should use optimised representation, but got {:?}", | ||||||
|  |             kv_attrs | ||||||
|  |         ), | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -11,3 +11,9 @@ impl Display for NixString { | ||||||
|         f.write_str(self.0.as_str()) |         f.write_str(self.0.as_str()) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | impl From<&str> for NixString { | ||||||
|  |     fn from(s: &str) -> Self { | ||||||
|  |         NixString(s.to_string()) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue