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::Value; | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests; | ||||
| 
 | ||||
| #[derive(Clone, Debug)] | ||||
| pub enum NixAttrs { | ||||
|     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()) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 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