Only implements the different conversion types from and to ints for now.
Unfortunately very reliant on builtins.{floor,ceil} which can't be
implemented purely except very inefficiently (to my knowledge), so it
only really works for C++ Nix >= 2.4. Tests are thus skipped for
C++ Nix 2.3.
Change-Id: Idcb1a11df11e214cdba3f2a0715472b370daa7dc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9008
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
		
	
			
		
			
				
	
	
		
			23 lines
		
	
	
	
		
			522 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
	
		
			522 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { depot, ... }:
 | |
| 
 | |
| let
 | |
|   inherit (depot.users.sterni.nix)
 | |
|     num
 | |
|     ;
 | |
| in
 | |
| 
 | |
| rec {
 | |
|   # In C++ Nix, the required builtins have been added in version 2.4
 | |
|   ceil = builtins.ceil or (throw "Nix implementation is missing builtins.ceil");
 | |
|   floor = builtins.floor or (throw "Nix implementation is missing builtins.floor");
 | |
| 
 | |
|   truncate = f: if f >= 0 then floor f else ceil f;
 | |
|   round = f:
 | |
|     let
 | |
|       s = num.sign f;
 | |
|       a = s * f;
 | |
|     in
 | |
|     s * (if a >= floor a + 0.5 then ceil a else floor a);
 | |
| 
 | |
|   intToFloat = i: i * 1.0;
 | |
| }
 |