Skip to content

Commit

Permalink
Cover more math functions of the Elm core module 'Basics'
Browse files Browse the repository at this point in the history
+ Add steps in the automated tests to cover the functions min, max, abs, modBy, remainderBy, negate, abs, clamp.
+ Add declarations for said functions to the 'Basics' module and add the to the list of default imports.
  • Loading branch information
Viir committed Jul 13, 2023
1 parent c56848c commit b512ad9
Show file tree
Hide file tree
Showing 46 changed files with 129 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -854,6 +854,13 @@ elmValuesToExposeToGlobalDefault =
, ( "(<<)", [ "Basics" ] )
, ( "True", [ "Basics" ] )
, ( "False", [ "Basics" ] )
, ( "min", [ "Basics" ] )
, ( "max", [ "Basics" ] )
, ( "modBy", [ "Basics" ] )
, ( "remainderBy", [ "Basics" ] )
, ( "negate", [ "Basics" ] )
, ( "abs", [ "Basics" ] )
, ( "clamp", [ "Basics" ] )
, ( "(::)", [ "List" ] )
, ( "Nothing", [ "Maybe" ] )
, ( "Just", [ "Maybe" ] )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,26 @@ ge a b =
Pine_kernel.is_sorted_ascending_int [b, a]
{-| Find the smaller of two comparables.
min 42 12345678 == 42
min "abc" "xyz" == "abc"
-}
min : comparable -> comparable -> comparable
min x y =
if lt x y then x else y
{-| Find the larger of two comparables.
max 42 12345678 == 12345678
max "abc" "xyz" == "xyz"
-}
max : comparable -> comparable -> comparable
max x y =
if gt x y then x else y
apR : a -> (a -> b) -> b
apR x f =
f x
Expand Down Expand Up @@ -213,6 +233,63 @@ stringCharsToSignedInts chars =
[]
modBy : Int -> Int -> Int
modBy divisor dividend =
let
remainder = remainderBy divisor dividend
in
if lt remainder 0 then
add remainder divisor
else
remainder
remainderBy : Int -> Int -> Int
remainderBy divisor dividend =
sub dividend (mul divisor (idiv dividend divisor))
{-| Negate a number.
negate 42 == -42
negate -42 == 42
negate 0 == 0
-}
negate : number -> number
negate n =
-n
{-| Get the [absolute value][abs] of a number.
abs 16 == 16
abs -4 == 4
abs -8.5 == 8.5
abs 3.14 == 3.14
[abs]: https://en.wikipedia.org/wiki/Absolute_value
-}
abs : number -> number
abs n =
if lt n 0 then -n else n
{-| Clamps a number within a given range. With the expression
`clamp 100 200 x` the results are as follows:
100 if x < 100
x if 100 <= x < 200
200 if 200 <= x
-}
clamp : number -> number -> number -> number
clamp low high number =
if lt number low then
low
else if gt number high then
high
else
number
isPineList a =
Pine_kernel.equal [ Pine_kernel.take [ 0, a ], [] ]
Expand Down
2 changes: 1 addition & 1 deletion implement/elm-time/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace ElmTime;

public class Program
{
public static string AppVersionId => "2023-07-11";
public static string AppVersionId => "2023-07-13";

private static int AdminInterfaceDefaultPort => 4000;

Expand Down
4 changes: 2 additions & 2 deletions implement/elm-time/elm-time.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<TargetFramework>net7.0</TargetFramework>
<RootNamespace>ElmTime</RootNamespace>
<AssemblyName>elm-time</AssemblyName>
<AssemblyVersion>2023.0711.0.0</AssemblyVersion>
<FileVersion>2023.0711.0.0</FileVersion>
<AssemblyVersion>2023.0713.0.0</AssemblyVersion>
<FileVersion>2023.0713.0.0</FileVersion>
<Nullable>enable</Nullable>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
42
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.min 42 12345678
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.min 42 17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
71
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
min 91 71
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
12345678
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.max 42 12345678
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
57
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.max 57 51
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
87
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
max 87 73
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.modBy 13 29
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[3,0,1,2,3,0,1,2,3,0,1]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
List.map (Basics.modBy 4) [ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
modBy 7 13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-6
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.remainderBy 7 -13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[-1,0,-3,-2,-1,0,1,2,3,0,1]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
List.map (Basics.remainderBy 4) [ -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ]
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-1
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
remainderBy 5 -21
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.negate 17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
-23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
negate 23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.abs -13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.abs 23
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
27
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
abs -27
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
5
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.clamp 3 5 7
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.clamp 11 17 13
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
19
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Basics.clamp 19 27 17
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
37
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
clamp 31 37 39

0 comments on commit b512ad9

Please sign in to comment.