test(tvix/eval): add identity tests for literal evaluation
Change-Id: Id3f37fbe341e15e9428ef1d579d61a514232c0e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6132 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
		
							parent
							
								
									3671056640
								
							
						
					
					
						commit
						96e9f750c5
					
				
					 19 changed files with 56 additions and 2 deletions
				
			
		| 
						 | 
					@ -2,14 +2,32 @@ use crate::eval::interpret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use test_generator::test_resources;
 | 
					use test_generator::test_resources;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// identity-* tests contain Nix code snippets which should evaluate to
 | 
				
			||||||
 | 
					// themselves exactly (i.e. literals).
 | 
				
			||||||
 | 
					#[test_resources("src/tests/tvix_tests/identity-*.nix")]
 | 
				
			||||||
 | 
					fn identity(code_path: &str) {
 | 
				
			||||||
 | 
					    let code = std::fs::read_to_string(code_path).expect("should be able to read test code");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let result = interpret(&code).expect("evaluation of identity test should succeed");
 | 
				
			||||||
 | 
					    let result_str = format!("{}", result);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_eq!(
 | 
				
			||||||
 | 
					        code.trim(),
 | 
				
			||||||
 | 
					        result_str,
 | 
				
			||||||
 | 
					        "result value representation (right) must match expectation (left)"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// eval-okay-* tests contain a snippet of Nix code, and an expectation
 | 
					// eval-okay-* tests contain a snippet of Nix code, and an expectation
 | 
				
			||||||
// of the produced string output of the evaluator.
 | 
					// of the produced string output of the evaluator.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// These evaluations are always supposed to succeed, i.e. all snippets
 | 
					// These evaluations are always supposed to succeed, i.e. all snippets
 | 
				
			||||||
// are guaranteed to be valid Nix code.
 | 
					// are guaranteed to be valid Nix code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// eval-okay-* tests from the original Nix test suite.
 | 
				
			||||||
#[cfg(feature = "nix_tests")]
 | 
					#[cfg(feature = "nix_tests")]
 | 
				
			||||||
#[test_resources("src/tests/nix_tests/eval-okay-*.nix")]
 | 
					#[test_resources("src/tests/nix_tests/eval-okay-*.nix")]
 | 
				
			||||||
fn eval_okay(code_path: &str) {
 | 
					fn nix_eval_okay(code_path: &str) {
 | 
				
			||||||
    let base = code_path
 | 
					    let base = code_path
 | 
				
			||||||
        .strip_suffix("nix")
 | 
					        .strip_suffix("nix")
 | 
				
			||||||
        .expect("test files always end in .nix");
 | 
					        .expect("test files always end in .nix");
 | 
				
			||||||
| 
						 | 
					@ -24,6 +42,6 @@ fn eval_okay(code_path: &str) {
 | 
				
			||||||
    assert_eq!(
 | 
					    assert_eq!(
 | 
				
			||||||
        exp.trim(),
 | 
					        exp.trim(),
 | 
				
			||||||
        result_str,
 | 
					        result_str,
 | 
				
			||||||
        "result value (and its representation) must match expectation"
 | 
					        "result value representation (right) must match expectation (left)"
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										19
									
								
								tvix/eval/src/tests/tvix_tests/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tvix/eval/src/tests/tvix_tests/README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					These tests are "native" to Tvix and exist in addition to the Nix test
 | 
				
			||||||
 | 
					suite.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All of these are straightforward code snippets which are expected to
 | 
				
			||||||
 | 
					produce a certain result.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# `identity-*` tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Files named `identity-*.nix` contain code that is supposed to produce
 | 
				
			||||||
 | 
					itself exactly after evaluation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are useful for testing literals.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# `eval-okay-*` tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Files named `eval-okay-*.nix` contain code which is supposed to
 | 
				
			||||||
 | 
					evaluate to the output in the corresponding `eval-okay-*.exp` file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This convention is taken from the original Nix test suite.
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-bool-false.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-bool-false.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					false
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-bool-true.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-bool-true.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					true
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-empty-attrs.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-empty-list.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-empty-list.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					[ ]
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-flat-attrs.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					{ a = 15; b = "string"; c = null; }
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-float.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-float.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					4.2
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					[ 1 2.1 "three" null ]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					[ 4.2 6.9 13.37 ]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					[ 0 1 2 3 4 5 7 8 9 ]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					[ "string" "list" ]
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-int.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-int.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					42
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-kv-attrs.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					{ name = "foo"; value = 12; }
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-nested-attrs.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					{ a = { b = null; }; }
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-null.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-null.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					null
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-signed-float.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-signed-float.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					-4.2
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-signed-int.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-signed-int.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					-42
 | 
				
			||||||
							
								
								
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-string.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tvix/eval/src/tests/tvix_tests/identity-string.nix
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					"test string"
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue