feat(tvix/eval): implement binary comparison operators
This is accomplished by simply delegating to the Rust implementations of (Partial)Ord and (Partial)Eq, which are implemented for Value and underlying wrapper types to behave like they do in Nix. To ease the implementation overhead, a new comparison operator macro has been added to the VM module. Incomparable types will raise a new error variant when a comparison is attempted, containing both supplied types. This mimics the information carried in the error thrown by C++ Nix. Change-Id: Ia19634d69119d40722f3ca672387bc3a80096998 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6143 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									5a15ee3f5d
								
							
						
					
					
						commit
						4eafaae9e6
					
				
					 20 changed files with 121 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = false; ge = false; gt = false; le = false; lt = false; ne = false; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 6.9 == 4.2;
 | 
			
		||||
  ne = 4.2 != 4.2;
 | 
			
		||||
  lt = 2.5 < 1.5;
 | 
			
		||||
  le = 2.5 <= 1.5;
 | 
			
		||||
  gt = 1.5 > 2.5;
 | 
			
		||||
  ge = 1.5 >= 2.5;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = true; ge = true; gt = true; le = true; lt = true; ne = true; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 4.2 == 4.2;
 | 
			
		||||
  ne = 6.9 != 4.2;
 | 
			
		||||
  lt = 1.5 < 2.5;
 | 
			
		||||
  le = 2.5 <= 2.5;
 | 
			
		||||
  gt = 2.3 > 1.2;
 | 
			
		||||
  ge = 2.3 >= 2.3;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = false; ge = false; gt = false; le = false; lt = false; ne = false; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 69 == 42;
 | 
			
		||||
  ne = 42 != 42;
 | 
			
		||||
  lt = 2 < 1;
 | 
			
		||||
  le = 2 <= 1;
 | 
			
		||||
  gt = 1 > 2;
 | 
			
		||||
  ge = 1 >= 2;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = true; ge = true; gt = true; le = true; lt = true; ne = true; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 42 == 42;
 | 
			
		||||
  ne = 69 != 42;
 | 
			
		||||
  lt = 1 < 2;
 | 
			
		||||
  le = 2 <= 2;
 | 
			
		||||
  gt = 2 > 1;
 | 
			
		||||
  ge = 2 >= 2;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = false; ge = false; gt = false; le = false; lt = false; ne = false; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 6.9 == 4;
 | 
			
		||||
  ne = 4.0 != 4;
 | 
			
		||||
  lt = 2.5 < 1;
 | 
			
		||||
  le = 2 <= 1.5;
 | 
			
		||||
  gt = 1 > 1.1;
 | 
			
		||||
  ge = 1.5 >= 2;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = true; ge = true; gt = true; le = true; lt = true; ne = true; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = 42.0 == 42;
 | 
			
		||||
  ne = 6.9 != 4;
 | 
			
		||||
  lt = 1.5 < 2;
 | 
			
		||||
  le = 2.0 <= 2.0;
 | 
			
		||||
  gt = 1.1 > 1;
 | 
			
		||||
  ge = 2.3 >= 2.3;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = false; ge = false; gt = false; le = false; lt = false; ne = false; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = "test" == "not test";
 | 
			
		||||
  ne = "test" != "test";
 | 
			
		||||
  lt = "bcd" < "abc";
 | 
			
		||||
  le = "bcd" <= "abc";
 | 
			
		||||
  gt = "abc" > "bcd";
 | 
			
		||||
  ge = "abc" >= "bcd";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
{ eq = true; ge = true; gt = true; le = true; lt = true; ne = true; }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
{
 | 
			
		||||
  eq = "test" == "test";
 | 
			
		||||
  ne = "test" != "not test";
 | 
			
		||||
  lt = "abc" < "bcd";
 | 
			
		||||
  le = "bcd" <= "bcd";
 | 
			
		||||
  gt = "bcd" > "abc";
 | 
			
		||||
  ge = "bcd" >= "bcd";
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue