Skip to content

Commit

Permalink
Merge pull request #5555 from KilianVounckx/num-constants
Browse files Browse the repository at this point in the history
Add number constants
  • Loading branch information
Anton-4 authored Jun 17, 2023
2 parents 1c77ddf + 199a85a commit bb6f95d
Show file tree
Hide file tree
Showing 72 changed files with 334 additions and 313 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,6 @@ www/src/roc-tutorial
# It also ensures the compiler can always pull in 1 version of things and doesn't get restricted by sub lockfiles.
/**/Cargo.lock
!/Cargo.lock

# snapshot tests temp file
*.pending-snap
15 changes: 15 additions & 0 deletions crates/compiler/builtins/roc/Num.roc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ interface Num
Decimal,
Binary32,
Binary64,
e,
pi,
tau,
abs,
absDiff,
neg,
Expand Down Expand Up @@ -494,6 +497,18 @@ F32 : Num (FloatingPoint Binary32)
## [sqrt] and trigonometry are massively slower with [Dec] than with [F64].
Dec : Num (FloatingPoint Decimal)

## Euler's number (e)
e : Frac *
e = 2.71828182845904523536028747135266249775724709369995

## Archimedes' constant (π)
pi : Frac *
pi = 3.14159265358979323846264338327950288419716939937510

## Circle constant (τ)
tau : Frac *
tau = 2 * pi

# ------- Functions
## Convert a number to a [Str].
##
Expand Down
3 changes: 3 additions & 0 deletions crates/compiler/module/src/symbol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1264,6 +1264,9 @@ define_builtins! {
158 NUM_IS_FINITE: "isFinite"
159 NUM_MIN: "min"
160 NUM_MAX: "max"
161 NUM_E: "e"
162 NUM_PI: "pi"
163 NUM_TAU: "tau"
}
4 BOOL: "Bool" => {
0 BOOL_BOOL: "Bool" exposed_type=true // the Bool.Bool type alias
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,16 @@ procedure List.93 (List.436, List.437, List.438):
ret List.542;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.289;
let Num.292 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.292;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.290 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.290;
let Num.293 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.293;

procedure Num.77 (#Attr.2, #Attr.3):
let Num.288 : U64 = lowlevel NumSubSaturated #Attr.2 #Attr.3;
ret Num.288;
let Num.291 : U64 = lowlevel NumSubSaturated #Attr.2 #Attr.3;
ret Num.291;

procedure Test.1 (Test.2):
let Test.13 : U64 = 0i64;
Expand Down
4 changes: 2 additions & 2 deletions crates/compiler/test_mono/generated/binary_tree_fbip.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.287 : I64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : I64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;

procedure Test.4 (Test.27):
let Test.39 : [<rnu>C [<rnu><null>, C *self *self] *self, <null>] = TagId(0) ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ procedure List.9 (List.293):
ret List.523;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.287 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.290;

procedure Result.5 (Result.12, Result.13):
let Result.39 : U8 = 1i64;
Expand Down
4 changes: 2 additions & 2 deletions crates/compiler/test_mono/generated/choose_i128_layout.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.288 : I128 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.288;
let Num.291 : I128 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.291;

procedure Test.0 ():
let Test.6 : I128 = 18446744073709551616i64;
Expand Down
4 changes: 2 additions & 2 deletions crates/compiler/test_mono/generated/choose_u128_layout.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.287 : U128 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : U128 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;

procedure Test.0 ():
let Test.2 : U128 = 170141183460469231731687303715884105728u128;
Expand Down
4 changes: 2 additions & 2 deletions crates/compiler/test_mono/generated/choose_u64_layout.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
procedure Num.19 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;

procedure Test.0 ():
let Test.2 : U64 = 9999999999999999999i64;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ procedure List.93 (List.436, List.437, List.438):
ret List.524;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.287 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.290;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.288 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.288;
let Num.291 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.291;

procedure Str.3 (#Attr.2, #Attr.3):
let Str.300 : Str = lowlevel StrConcat #Attr.2 #Attr.3;
Expand Down
8 changes: 4 additions & 4 deletions crates/compiler/test_mono/generated/dict.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,12 @@ procedure List.83 (List.553, List.554, List.555):
jump List.535 List.553 List.554 List.555;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.288 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.288;
let Num.291 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.291;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.290 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.290;
let Num.293 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.293;

procedure Test.0 ():
let Test.3 : {} = Struct {};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ procedure List.66 (#Attr.2, #Attr.3):
ret List.526;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.287 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.287;
let Num.290 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.290;

procedure Test.2 (Test.5):
dec Test.5;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,32 +333,32 @@ procedure List.93 (List.436, List.437, List.438):
ret List.753;

procedure Num.127 (#Attr.2):
let Num.311 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.311;
let Num.314 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.314;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.320 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.320;
let Num.323 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.323;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.324 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.324;
let Num.327 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.327;

procedure Num.21 (#Attr.2, #Attr.3):
let Num.317 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.317;
let Num.320 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.320;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.323 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.323;
let Num.326 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.326;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.325 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.325;
let Num.328 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.328;

procedure Num.94 (#Attr.2, #Attr.3):
let Num.316 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.316;
let Num.319 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.319;

procedure Str.12 (#Attr.2):
let Str.324 : List U8 = lowlevel StrToUtf8 #Attr.2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,32 +268,32 @@ procedure List.93 (List.436, List.437, List.438):
ret List.645;

procedure Num.127 (#Attr.2):
let Num.292 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.292;
let Num.295 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.295;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.301 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.301;
let Num.304 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.304;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.305 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.305;
let Num.308 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.308;

procedure Num.21 (#Attr.2, #Attr.3):
let Num.298 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.298;
let Num.301 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.301;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.304 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.304;
let Num.307 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.307;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.306;
let Num.309 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.309;

procedure Num.94 (#Attr.2, #Attr.3):
let Num.297 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.297;
let Num.300 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.300;

procedure Str.12 (#Attr.2):
let Str.313 : List U8 = lowlevel StrToUtf8 #Attr.2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,32 +275,32 @@ procedure List.93 (List.436, List.437, List.438):
ret List.645;

procedure Num.127 (#Attr.2):
let Num.292 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.292;
let Num.295 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.295;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.301 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.301;
let Num.304 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.304;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.305 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.305;
let Num.308 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.308;

procedure Num.21 (#Attr.2, #Attr.3):
let Num.298 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.298;
let Num.301 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.301;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.304 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.304;
let Num.307 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.307;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.306;
let Num.309 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.309;

procedure Num.94 (#Attr.2, #Attr.3):
let Num.297 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.297;
let Num.300 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.300;

procedure Str.12 (#Attr.2):
let Str.313 : List U8 = lowlevel StrToUtf8 #Attr.2;
Expand Down
24 changes: 12 additions & 12 deletions crates/compiler/test_mono/generated/encode_derived_string.txt
Original file line number Diff line number Diff line change
Expand Up @@ -142,28 +142,28 @@ procedure List.93 (List.436, List.437, List.438):
ret List.576;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.292 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.292;
let Num.295 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.295;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.295 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.295;
let Num.298 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.298;

procedure Num.21 (#Attr.2, #Attr.3):
let Num.290 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.290;
let Num.293 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.293;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.294 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.294;
let Num.297 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.297;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.296 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.296;
let Num.299 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.299;

procedure Num.94 (#Attr.2, #Attr.3):
let Num.289 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.289;
let Num.292 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.292;

procedure Str.12 (#Attr.2):
let Str.312 : List U8 = lowlevel StrToUtf8 #Attr.2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,32 +223,32 @@ procedure List.93 (List.436, List.437, List.438):
ret List.625;

procedure Num.127 (#Attr.2):
let Num.294 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.294;
let Num.297 : U8 = lowlevel NumIntCast #Attr.2;
ret Num.297;

procedure Num.19 (#Attr.2, #Attr.3):
let Num.303 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.303;
let Num.306 : U64 = lowlevel NumAdd #Attr.2 #Attr.3;
ret Num.306;

procedure Num.20 (#Attr.2, #Attr.3):
let Num.307 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.307;
let Num.310 : U64 = lowlevel NumSub #Attr.2 #Attr.3;
ret Num.310;

procedure Num.21 (#Attr.2, #Attr.3):
let Num.300 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.300;
let Num.303 : U64 = lowlevel NumMul #Attr.2 #Attr.3;
ret Num.303;

procedure Num.22 (#Attr.2, #Attr.3):
let Num.306 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.306;
let Num.309 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.309;

procedure Num.24 (#Attr.2, #Attr.3):
let Num.308 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.308;
let Num.311 : Int1 = lowlevel NumGt #Attr.2 #Attr.3;
ret Num.311;

procedure Num.94 (#Attr.2, #Attr.3):
let Num.299 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.299;
let Num.302 : U64 = lowlevel NumDivCeilUnchecked #Attr.2 #Attr.3;
ret Num.302;

procedure Str.12 (#Attr.2):
let Str.313 : List U8 = lowlevel StrToUtf8 #Attr.2;
Expand Down
Loading

0 comments on commit bb6f95d

Please sign in to comment.