Minor fixes. (#7122)

Mostly stuff to tidy up the static methods in the CB.

- Remove default pattern from `parse_to_table` (caused IDE to freeze).
- Rename any `_` arguments to what they are.
- Merge `Date.now` into `Date.today`
- Merge the Interval constructors into a single constructor.
- Hide various methods.
This commit is contained in:
James Dunkerley 2023-06-27 19:18:15 +01:00 committed by GitHub
parent 2bac9cc844
commit 56688ec1e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 329 additions and 212 deletions

View File

@ -1,5 +1,4 @@
import project.Data.Pair.Pair
from project.Data.Range.Extensions import all
import project.Data.Text.Text
import project.Data.Vector.Vector
import project.Error.Error
@ -13,6 +12,8 @@ import project.Warning.Warning
from project.Data.Boolean import Boolean, True, False
from project.Data.Ordering import all
from project.Data.Range.Extensions import all
from project.Function import const
## Any is the universal top-type, with all other types being subsumed by it.
@ -264,7 +265,8 @@ type Any
"Hello".if_nothing ""
if_nothing : Any -> Any
if_nothing self ~_ = self
if_nothing self ~other =
const self other
## Executes the provided handler on an error, or returns the value unchanged.
@ -317,7 +319,8 @@ type Any
error = my_map.at "x"
error.map_error (_ -> Example_Error_Type "x is missing")
map_error : (Error -> Error) -> Any
map_error self _ = self
map_error self ~f =
const self f
## Checks if `self` is an error.

View File

@ -25,7 +25,9 @@ from project.Data.Index_Sub_Range import Index_Sub_Range
## The type of primitive mutable arrays.
@Builtin_Type
type Array
## Creates an array with length 0.
## PRIVATE
ADVANCED
Creates an array with length 0.
> Example
Create an empty array.
@ -34,7 +36,9 @@ type Array
empty : Array
empty = @Builtin_Method "Array.empty"
## Creates a new array of length size, with all elements uninitialized.
## PRIVATE
ADVANCED
Creates a new array of length size, with all elements uninitialized.
Arguments:
- size: The size of the array to create.

View File

@ -1,7 +1,6 @@
import project.Any.Any
import project.Data.Numbers.Integer
import project.Data.Range.Range
from project.Data.Range.Extensions import all
import project.Data.Text.Text
import project.Data.Vector.Vector
import project.Errors.Common.Index_Out_Of_Bounds
@ -16,6 +15,7 @@ import project.Random
import project.Runtime.Ref.Ref
from project.Data.Boolean import Boolean, True, False
from project.Data.Range.Extensions import all
import project.Metadata.Widget
from project.Metadata.Widget import Single_Choice
@ -111,7 +111,7 @@ resolve_ranges ranges length =
if step <= 0 then Panic.throw (Illegal_Argument.Error "Range step must be positive.") else
if (start < 0) || (end < 0) then Panic.throw (Illegal_Argument.Error "Range start and end must not be negative.") else
if start >= length then Panic.throw (Index_Out_Of_Bounds.Error start length) else
actual_end = Math.min end length
actual_end = end.min length
if actual_end < start then start.up_to start . with_step step else
start.up_to actual_end . with_step step
ranges.map trim
@ -164,7 +164,7 @@ sort_and_merge_ranges ranges =
sorted.drop 1 . each range->
current = current_ref.get
case range.start <= current.end of
True -> current_ref.put (current.start.up_to (Math.max current.end range.end))
True -> current_ref.put (current.start.up_to (current.end.max range.end))
False ->
builder.append current
current_ref.put range
@ -200,7 +200,7 @@ take_helper : Integer -> (Integer -> Any) -> (Integer -> Integer -> Any) -> (Vec
take_helper length at single_slice slice_ranges range = case range of
count : Integer -> take_helper length at single_slice slice_ranges (Index_Sub_Range.First count)
_ : Range -> take_helper length at single_slice slice_ranges (Index_Sub_Range.By_Index range)
Index_Sub_Range.First count -> single_slice 0 (Math.min length count)
Index_Sub_Range.First count -> single_slice 0 (length.min count)
Index_Sub_Range.Last count -> single_slice length-count length
Index_Sub_Range.While predicate ->
end = 0.up_to length . find i-> (predicate (at i)).not

View File

@ -34,51 +34,62 @@ type Bound
example_bound_exclusive = Bound.Exclusive 2.
Exclusive n
type Interval_Type
## Both the start and end bounds are included.
Inclusive
## The start bound is included, but the end bound is excluded.
Start_Exclusive
## The start bound is excluded, but the end bound is included.
End_Exclusive
## Both the start and end bounds are excluded.
Exclusive
## A type representing an interval over real numbers.
type Interval
## Creates an interval that excludes both its bounds.
## Creates an interval.
Arguments:
- start: The start of the interval. (Included by default)
- end: The end of the interval. (Excluded by default)
- interval_type: The type of interval to create. (End_Exclusive by default)
> Example
Create the bounds-exclusive range from 0.1 to 0.5.
import Standard.Base.Data.Interval
example_exclusive = Interval.exclusive 0.1 0.5
exclusive : Number -> Number -> Interval
exclusive start end = Interval.Between (Bound.Exclusive start) (Bound.Exclusive end)
## Creates an interval that excludes its lower bound.
import Standard.Base.Data.Interval.Interval
import Standard.Base.Data.Interval.Interval_Type
example_exclusive = Interval.new 0.1 0.5 Interval_Type.Exclusive
> Example
Create the start-exclusive range from 1 to 5.
import Standard.Base.Data.Interval
example_start_exclusive = Interval.start_exclusive 1 5
start_exclusive : Number -> Number -> Interval
start_exclusive start end = Interval.Between (Bound.Exclusive start) (Bound.Inclusive end)
## Creates an interval that excludes its upper bound.
import Standard.Base.Data.Interval.Interval
import Standard.Base.Data.Interval.Interval_Type
example_start_exclusive = Interval.new 1 5 Interval_Type.Start_Exclusive
> Example
Create the end-exclusive range from 1 to 5.
import Standard.Base.Data.Interval
example_end_exclusive = Interval.end_exclusive 1 5
end_exclusive : Number -> Number -> Interval
end_exclusive start end = Interval.Between (Bound.Inclusive start) (Bound.Exclusive end)
## Creates an interval that includes both of its bounds.
import Standard.Base.Data.Interval.Interval
import Standard.Base.Data.Interval.Interval_Type
example_end_exclusive = Interval.new 1 5 Interval_Type.End_Exclusive
> Example
Create the inclusive range from 0 to 0.
import Standard.Base.Data.Interval
import Standard.Base.Data.Interval.Interval
import Standard.Base.Data.Interval.Interval_Type
example_inclusive = Interval.inclusive 0 0
inclusive : Number -> Number -> Interval
inclusive start end = Interval.Between (Bound.Inclusive start) (Bound.Inclusive end)
example_inclusive = Interval.new 0 0 Interval_Type.Inclusive
new : Number -> Number -> Interval_Type -> Interval
new start end interval_type=Interval_Type.End_Exclusive = case interval_type of
Interval_Type.Inclusive -> Interval.Between (Bound.Inclusive start) (Bound.Inclusive end)
Interval_Type.Start_Exclusive -> Interval.Between (Bound.Exclusive start) (Bound.Inclusive end)
Interval_Type.End_Exclusive -> Interval.Between (Bound.Inclusive start) (Bound.Exclusive end)
Interval_Type.Exclusive -> Interval.Between (Bound.Exclusive start) (Bound.Exclusive end)
## PRIVATE
@ -99,7 +110,7 @@ type Interval
import Standard.Base.Data.Interval
example_contains = (Interval.inclusive 0.1 1) . contains 0.33
example_contains = (Interval.new 0.1 1 include_end=True) . contains 0.33
contains : Number -> Boolean
contains self that = if self.start.n > self.end.n then False else
case self.start of
@ -117,7 +128,7 @@ type Interval
import Standard.Base.Data.Interval
example_is_empty = Interval.inclusive 0 0 . is_empty
example_is_empty = Interval.new 0 0 include_start=False . is_empty
is_empty : Boolean
is_empty self = case self.start of
Bound.Exclusive s -> case self.end of
@ -134,7 +145,7 @@ type Interval
import Standard.Base.Data.Interval
example_not_empty = Interval.inclusive 0 0.001 . not_empty
example_not_empty = Interval.new 0 0.001 . not_empty
not_empty : Boolean
not_empty self = self.is_empty.not

View File

@ -48,12 +48,15 @@ type Json
parsed = json_parse json
make_enso parsed
## Serialize an Object to JSON
## PRIVATE
ADVANCED
Serialize an Object to JSON.
stringify : (JS_Object | Boolean | Number | Nothing | Text | Vector) -> Text
stringify object =
json_stringify (make_javascript object.to_js_object)
## Convert a Vector of Keys and Values to JSON.
## PRIVATE
Convert a Vector of Keys and Values to JSON.
Keys must be `Text` values.
from_pairs : Vector -> Text
from_pairs pairs =

View File

@ -32,11 +32,15 @@ from project.Data.Boolean import Boolean, True, False
treated as a Map.
@Builtin_Type
type Map key value
## Returns an empty map.
## PRIVATE
ADVANCED
Returns an empty map.
empty : Map
empty = @Builtin_Method "Map.empty"
## Returns a single-element map with the given key and value.
## PRIVATE
ADVANCED
Returns a single-element map with the given key and value.
A Call to `Map.singleton key value` is the same as a call to
`Map.empty.insert key value`.
@ -284,7 +288,7 @@ type Map key value
import Standard.Base.Data.Map.Map
import Standard.Examples
example_fold = Examples.map.fold 0 (l -> r -> Math.max l r.length)
example_fold = Examples.map.fold 0 (l -> r -> l.max r.length)
fold : Any -> (Any -> Any -> Any) -> Any
fold self init function = self.values.fold init function

View File

@ -1,8 +1,7 @@
import project.Any.Any
import project.Data.Interval.Bound
import project.Data.Interval.Interval
import project.Data.Interval.Interval_Type
import project.Data.Numbers.Number
import project.Errors.Unimplemented.Unimplemented
polyglot java import java.lang.Long
polyglot java import java.util.Random
@ -24,7 +23,7 @@ type Deterministic_Random
from Standard.Base.Data.Noise.Generator import Deterministic_Random
example_det_random = Deterministic_Random.step 1 (Interval.inclusive 0 1)
example_det_random = Deterministic_Random.step 1 (Interval.new 0 1 Interval_Type.Inclusive)
step : Number -> Interval -> Number
step self input interval =
max_long = Long.MAX_VALUE
@ -53,5 +52,5 @@ type Deterministic_Random
Deterministically perturb the input number 1.
1.noise
Number.noise : Interval -> Deterministic_Random -> Any
Number.noise self (interval = Interval.exclusive 0 1) gen=Deterministic_Random =
Number.noise self (interval = Interval.new 0 1 Interval_Type.Exclusive) gen=Deterministic_Random =
gen.step self interval

View File

@ -161,7 +161,9 @@ type Ordering
## A representation that the first value orders as greater than the second.
Greater
## Compares to values and returns an Ordering
## PRIVATE
ADVANCED
Compares values and returns an Ordering.
compare : Any -> Any -> Ordering ! Incomparable_Values
compare x y =
if x < y then Ordering.Less else
@ -190,7 +192,9 @@ type Ordering
Ordering.Equal -> other
Ordering.Greater -> Ordering.Greater
## Converts a sign-based representation of ordering to Enso's native ordering.
## PRIVATE
ADVANCED
Converts a sign-based representation of ordering to Enso's native ordering.
Arguments:
- sign: The number representing the relative ordering of two entities.

View File

@ -9,7 +9,9 @@ from project.Data.Boolean import True, False
polyglot java import org.enso.base.Text_Utils
polyglot java import com.ibm.icu.text.BreakIterator
## Compares two text values according to the natural dictionary ordering.
## PRIVATE
ADVANCED
Compares two text values according to the natural dictionary ordering.
> Example
Compare two texts according to the natural dictionary ordering.

View File

@ -4,7 +4,9 @@ import project.Data.Vector.Vector
from project.Data.Boolean import True, False
## Compares two Vectors according to the lexicographic ordering.
## PRIVATE
ADVANCED
Compares two Vectors according to the lexicographic ordering.
Arguments:
- vector1: The first vector to compare.

View File

@ -14,7 +14,9 @@ from project.Data.Boolean import Boolean, True, False
## Represents a right-exclusive range of integer values.
type Range
## Create a representation of a right-exclusive range of integer values.
## PRIVATE
ADVANCED
Create a representation of a right-exclusive range of integer values.
Arguments:
- start: The left boundary of the range. Its value is included.

View File

@ -18,7 +18,9 @@ type Set
## PRIVATE
Value (underlying_map : Map Any Nothing)
## Constructs a new set from a vector.
## PRIVATE
ADVANCED
Constructs a new set from a vector.
Arguments:
- vector: the vector of elements to add to the set.
@ -34,7 +36,9 @@ type Set
map = Map.from_vector pairs error_on_duplicates=error_on_duplicates
Set.Value map
## Constructs an empty set.
## PRIVATE
ADVANCED
Constructs an empty set.
empty : Set
empty = Set.Value Map.empty

View File

@ -139,7 +139,8 @@ type Statistic
Statistic.Kurtosis -> 4
_ -> Nothing
## Compute a single statistic on a vector like object.
## PRIVATE
Compute a single statistic on a vector like object.
Arguments:
- data: Vector like object which has a `to_array` method.
@ -148,7 +149,8 @@ type Statistic
compute data statistic=Statistic.Count =
Statistic.compute_bulk data [statistic] . first
## Compute a set of statistics on a vector like object.
## PRIVATE
Compute a set of statistics on a vector like object.
Arguments:
- data: Vector like object which has a `to_array` method.
@ -180,7 +182,8 @@ type Statistic
Statistic.R_Squared series -> calculate_correlation_statistics data series . rSquared
_ -> moments.compute (to_moment_statistic statistic)
## Compute a running statistics on a vector like object.
## PRIVATE
Compute a running statistics on a vector like object.
Arguments:
- data: Vector like object which has a `to_array` method.
@ -189,7 +192,8 @@ type Statistic
running data statistic=Statistic.Sum =
Statistic.running_bulk data [statistic] . map .first
## Compute a set running statistics on a vector like object.
## PRIVATE
Compute a set running statistics on a vector like object.
Arguments:
- data: Vector like object which has a `to_array` method.
@ -264,7 +268,8 @@ type Statistic
output.to_vector
## Assigns a rank to each value of data, dealing with equal values according to the method.
## PRIVATE
Assigns a rank to each value of data, dealing with equal values according to the method.
Arguments:
- data: Input data to rank.
@ -337,6 +342,22 @@ Vector.running : Statistic -> Vector Any
Vector.running self statistic=Statistic.Count =
Statistic.running self statistic
## Compute a set running statistics on the vector.
Arguments:
- statistics: Set of statistics to calculate.
Vector.running_bulk : Vector Statistic -> Vector Any
Vector.running_bulk self statistics=[Statistic.Count, Statistic.Sum] =
Statistic.running_bulk self statistics
## Assigns a rank to each value of data, dealing with equal values according to the method.
Arguments:
- method: Method used to deal with equal values.
Vector.rank_data : Rank_Method -> Vector
Vector.rank_data self method=Rank_Method.Average =
Statistic.rank_data self method
## PRIVATE
compute_fold counter current value =
if is_valid value . not then current else

View File

@ -366,7 +366,7 @@ type Match_Iterator
filler_span = (Utf_16_Span.Value filler_range self.input)
match = Match.Value self.pattern regex_result self.input
## Handle edge case where match is 0 length
next_cursor = Math.max (self.cursor + 1) (match.utf_16_end 0)
next_cursor = (self.cursor + 1).max (match.utf_16_end 0)
next_iterator = Match_Iterator.Value self.pattern self.input next_cursor
Match_Iterator_Value.Next filler_span match next_iterator

View File

@ -5,7 +5,6 @@ import project.Data.Numbers.Integer
import project.Data.Ordering.Ordering
import project.Data.Ordering.Comparable
import project.Data.Text.Text
from project.Data.Text.Extensions import all
import project.Data.Time.Date_Period.Date_Period
import project.Data.Time.Date_Range.Date_Range
import project.Data.Time.Date_Time.Date_Time
@ -26,6 +25,7 @@ import project.Nothing.Nothing
import project.Panic.Panic
from project.Data.Boolean import Boolean, True, False
from project.Data.Text.Extensions import all
from project.Data.Time.Date_Time import ensure_in_epoch
from project.Widget_Helpers import make_date_format_selector
@ -61,16 +61,7 @@ new_builtin year month day = @Builtin_Method "Date.new_builtin"
offset or timezone.
@Builtin_Type
type Date
## Obtains the current date from the system clock in the system timezone.
> Example
Get the current date.
example_now = Date.now
now : Date
now = @Builtin_Method "Date.now"
## ALIAS Current Date
## ALIAS Current Date, now
Obtains the current date from the system clock in the system timezone.
@ -79,7 +70,7 @@ type Date
example_today = Date.today
today : Date
today = Date.now
today = @Builtin_Method "Date.today"
## Constructs a new Date from a year, month, and day.
@ -192,7 +183,7 @@ type Date
from Standard.Base import Date
example_year = Date.now.year
example_year = Date.today.year
year : Integer
year self = @Builtin_Method "Date.year"
@ -201,7 +192,7 @@ type Date
> Example
Get the current month.
example_month = Date.now.month
example_month = Date.today.month
month : Integer
month self = @Builtin_Method "Date.month"
@ -212,7 +203,7 @@ type Date
from Standard.Base import Date
example_day = Date.now.day
example_day = Date.today.day
day : Integer
day self = @Builtin_Method "Date.day"
@ -641,7 +632,7 @@ type Date
> Example
Convert the current date to a JS_Object.
example_to_json = Date.now.to_js_object
example_to_json = Date.today.to_js_object
to_js_object : JS_Object
to_js_object self =
type_pair = ["type", "Date"]
@ -722,9 +713,9 @@ week_days_between start end =
_ -> days_between
False ->
# We count the days in the first week up until Friday - the weekend is not counted.
first_week_days = Math.max 0 (Time_Utils.days_between start (start_of_first_full_week - (Period.new days=2)))
first_week_days = (Time_Utils.days_between start (start_of_first_full_week - (Period.new days=2))).max 0
# We count the days in the last week, not including the weekend.
last_week_days = Math.min (Time_Utils.days_between start_of_last_week end) 5
last_week_days = (Time_Utils.days_between start_of_last_week end).min 5
full_weeks_between * 5 + first_week_days + last_week_days
## PRIVATE

View File

@ -38,7 +38,7 @@ type Date_Range
decreasing range, flip the start and the end or use `down_to`, but
keeping the positive step.
new : Date -> Date -> Date_Period|Period -> Date_Range
new start=Date.now end=Date.now step=Date_Period.Day =
new start=Date.today end=Date.today step=Date_Period.Day =
increasing = start <= end
Date_Range.new_internal start end increasing step

View File

@ -6,7 +6,6 @@ import project.Data.Map.Map
import project.Data.Numbers.Integer
import project.Data.Pair.Pair
import project.Data.Range.Range
from project.Data.Range.Extensions import all
import project.Data.Text.Text
import project.Data.Sort_Direction.Sort_Direction
import project.Errors.Common.Incomparable_Values
@ -25,7 +24,7 @@ import project.Panic.Panic
import project.Random
import project.Warning.Warning
import project.IO
from project.Data.Range.Extensions import all
## We have to import also conversion methods, therefore, we import all from the Ordering
module
@ -51,7 +50,9 @@ polyglot java import org.enso.base.Array_Builder
@Builtin_Type
type Vector a
## Creates a new vector of the given length, initializing elements using
## PRIVATE
ADVANCED
Creates a new vector of the given length, initializing elements using
the provided constructor function.
Arguments:
@ -98,7 +99,8 @@ type Vector a
arr : Array -> Vector.from_polyglot_array arr
single_element -> [single_element]
## Creates a new vector of the given length, filling the elements with
## ALIAS repeat
Creates a new vector of the given length, filling the elements with
the provided constant.
Arguments:
@ -116,7 +118,9 @@ type Vector a
fill length item =
Vector.new length _->item
## Creates a new vector builder instance.
## PRIVATE
ADVANCED
Creates a new vector builder instance.
A vector builder is a mutable data structure, that allows for gathering
a number of elements and then converting them into a vector. This is
@ -807,7 +811,7 @@ type Vector a
[1, 2, 3].zip [4, 5, 6] == [[1, 4], [2, 5], [3, 6]]
zip : Vector Any -> (Any -> Any -> Any) -> Vector Any
zip self that function=[_,_] =
len = Math.min self.length that.length
len = self.length.min that.length
Vector.new len i-> function (self.at i) (that.at i)
## Extend `self` vector to the length of `n` appending elements `elem` to

View File

@ -6,6 +6,7 @@ import project.Panic.Panic
import project.Runtime.Stack_Trace_Element
from project.Data.Boolean import Boolean, True, False
from project.Function import const
## A type representing dataflow errors.
@ -156,4 +157,5 @@ type Error
file.write "foo" . if_not_error file
if_not_error : Any -> Any
if_not_error self ~_ = self
if_not_error self ~other =
const self other

View File

@ -1,5 +1,6 @@
import project.Any.Any
import project.Data.Vector.Vector
import project.Nothing.Nothing
## A function is any type that represents a not-yet evaluated computation.
@ -78,7 +79,6 @@ identity x = x
flip : (Any -> Any -> Any) -> (Any -> Any -> Any)
flip f = (x -> y -> f y x)
## Creates a function which drops its input and returns the provided value instead.
The expression const a is the same as \_ -> a.
@ -88,7 +88,10 @@ flip f = (x -> y -> f y x)
> Example
IO.println <| [1, 2, 3].map (Function.const 7) # Prints '[7, 7, 7]'
const : Any -> Any -> Any
const x _ = x
const x ~f =
black_hole ~_ = Nothing
black_hole f
x
## Converts a single-argument function accepting a pair of elements into a multi-argument one.

View File

@ -77,6 +77,7 @@ import project.Data.Filter_Condition.Filter_Condition
import project.Data.Index_Sub_Range.Index_Sub_Range
import project.Data.Interval.Bound
import project.Data.Interval.Interval
import project.Data.Interval.Interval_Type
import project.Data.Json.Json
import project.Data.Json.JS_Object
import project.Data.Locale.Locale
@ -130,6 +131,7 @@ export project.Data.Filter_Condition.Filter_Condition
export project.Data.Index_Sub_Range.Index_Sub_Range
export project.Data.Interval.Bound
export project.Data.Interval.Interval
export project.Data.Interval.Interval_Type
export project.Data.Json.Json
export project.Data.Json.JS_Object
export project.Data.Locale.Locale

View File

@ -24,7 +24,8 @@ pi = 3.1415926535897932385
e : Decimal
e = 2.718281828459045235360
## ALIAS Minimum
## PRIVATE
ADVANCED
Returns the smaller value of `a` and `b`.
@ -44,7 +45,8 @@ e = 2.718281828459045235360
min : Number -> Number -> Number
min a b = if a <= b then a else b
## ALIAS Maximum
## PRIVATE
ADVANCED
Returns the larger value of `a` and `b`.

View File

@ -8,7 +8,9 @@ from project.Errors.Common import Module_Not_In_Package_Error
## Functionality for inspecting the current project.
@Builtin_Type
type Project_Description
## Returns the Enso project description for the given module. If no module is
## PRIVATE
ADVANCED
Returns the Enso project description for the given module. If no module is
given, returns the description of the project that the engine was executed
with, i.e., the project that contains the `main` method, or throws
`Module_Not_In_Package_Error` if there is no such project, e.g., when

View File

@ -30,7 +30,8 @@ polyglot java import java.net.ProxySelector
polyglot java import org.enso.base.Http_Utils
type HTTP
## Create a new instance of the HTTP client.
## ADVANCED
Create a new instance of the HTTP client.
Arguments:
- timeout: The length of time the client will wait for responses.
@ -54,13 +55,13 @@ type HTTP
import Standard.Base.Network.Proxy.Proxy
example_new =
HTTP.new (timeout = (Duration.new seconds=30)) (proxy = Proxy.new "example.com" 8080)
HTTP.new (timeout = (Duration.new seconds=30)) (proxy = Proxy.Address "example.com" 8080)
new : Duration -> Boolean -> Proxy -> HTTP_Version -> HTTP
new (timeout = (Duration.new seconds=10)) (follow_redirects = True) (proxy = Proxy.System) (version = HTTP_Version.HTTP_1_1) =
HTTP.Value timeout follow_redirects proxy version
## ALIAS Fetch Data
## PRIVATE
ADVANCED
Send the Get request and return the body.
Arguments:

View File

@ -5,7 +5,9 @@ import project.Data.Vector.Vector
## The HTTP form containing a vector of parts.
type Form
## Create a text field of a Form.
## PRIVATE
ADVANCED
Create a text field of a Form.
Arguments:
- key: The key for the field in the form.
@ -20,7 +22,9 @@ type Form
text_field : Text -> Text -> Part
text_field key val = Part.Value key (Part_Value.Text val)
## Create a file field of a Form.
## PRIVATE
ADVANCED
Create a file field of a Form.
Arguments:
- key: The key for the field in the form.
@ -35,7 +39,9 @@ type Form
file_field : Text -> Text -> Part
file_field key file = Part.Value key (Part_Value.File file)
## Create Form data from Parts.
## PRIVATE
ADVANCED
Create Form data from Parts.
Arguments:
- parts: A vector of parts to make up the form.

View File

@ -3,7 +3,13 @@ import project.Data.Text.Text
## Proxy settings.
type Proxy
## Create new proxy settings from a host and port.
## The proxy is disabled.
None
## Use the system proxy settings.
System
## Use the provided proxy server.
Arguments:
- host: The host address for the proxy.
@ -14,15 +20,5 @@ type Proxy
import Standard.Base.Network.Proxy.Proxy
example_new = Proxy.new "localhost" 80800
new : Text -> Integer -> Proxy
new host port=80 = Proxy.Address host port
## The proxy is disabled.
None
## Use the system proxy settings.
System
## Use the provided proxy server.
Address proxy_host proxy_port
example_new = Proxy.Address "localhost" 80800
Address proxy_host:Text proxy_port:Integer=80

View File

@ -54,7 +54,8 @@ type Panic
primitive_get_attached_stack_trace : Throwable -> Array
primitive_get_attached_stack_trace throwable = @Builtin_Method "Panic.primitive_get_attached_stack_trace"
## ADVANCED
## PRIVATE
ADVANCED
Returns the attached stack trace of the given throwable. Can be used to get
an Enso friendly stack trace from native Java exceptions.
@ -87,7 +88,8 @@ type Panic
rethrow : (Any ! Any) -> Any
rethrow value = value.catch Any Panic.throw
## Executes the provided action and if a panic matching the provided type was
## ADVANCED
Executes the provided action and if a panic matching the provided type was
thrown, calls the provided callback.
If action executes successfully, the result of `Panic.catch` is the result of
@ -152,7 +154,8 @@ type Panic
finalizer
result
## Executes the provided action and converts a possible panic matching any of
## ADVANCED
Executes the provided action and converts a possible panic matching any of
the provided types into a dataflow Error.
If action executes successfully, the result of `Panic.recover` is the result

View File

@ -68,7 +68,8 @@ type Random_Number_Generator
to_display_text : Text
to_display_text self = "Random_Number_Generator"
## Returns a new vector containing a random sample of the input vector, without
## PRIVATE
Returns a new vector containing a random sample of the input vector, without
replacement.
If the amount of elements to select is larger than the input vector size, it
@ -78,7 +79,8 @@ sample vector k rng =
new_array = Random_Utils.sample vector.to_array k rng.java_random
Vector.from_polyglot_array new_array
## Returns `k` indices sampled from the range [0, n-1] without replacement.
## PRIVATE
Returns `k` indices sampled from the range [0, n-1] without replacement.
If `k >= n`, it will return a random permutation of the indices.
random_indices : Integer -> Integer -> Random_Number_Generator -> Vector Integer

View File

@ -73,7 +73,9 @@ type Auto_Detect
get_format f-> f.for_web content_type uri
type File_Format
## Gets all the currently available file formats.
## PRIVATE
ADVANCED
Gets all the currently available file formats.
The available file formats are ones provided by libraries which are
imported within the current project. Importing an new library may cause
@ -84,7 +86,9 @@ type File_Format
## PRIVATE
Implements the `File.read` for this `File_Format`
read : File -> Problem_Behavior -> Any
read _ _ = Unimplemented.throw "This is an interface only."
read self file on_problems =
_ = [file, on_problems]
Unimplemented.throw "This is an interface only."
## PRIVATE
Create the constructor code for a File_Format type.
@ -129,7 +133,8 @@ type Plain_Text_Format
## PRIVATE
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> Plain_Text_Format | Nothing
for_web content_type _ =
for_web content_type uri =
_ = [uri]
parts = content_type.split ";" . map .trim
case parts.first of
"text/plain" ->
@ -170,12 +175,15 @@ type Bytes
If the File_Format supports reading from the web response, return a configured instance.
As `Bytes`, does not support reading from the web returns `Nothing`.
for_web : Text -> URI -> Bytes | Nothing
for_web _ _ = Nothing
for_web content_type uri =
_ = [content_type, uri]
Nothing
## PRIVATE
Implements the `File.read` for this `File_Format`
read : File -> Problem_Behavior -> Any
read self file _ =
read self file on_problems =
_ = [on_problems]
file.read_bytes
type JSON_Format
@ -196,7 +204,8 @@ type JSON_Format
## PRIVATE
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> JSON_Format | Nothing
for_web content_type _ =
for_web content_type uri =
_ = [uri]
first = content_type.split ';' . first . trim
case first of
"application/json" -> JSON_Format
@ -205,7 +214,8 @@ type JSON_Format
## PRIVATE
Implements the `File.read` for this `File_Format`
read : File -> Problem_Behavior -> Any
read self file _ =
read self file on_problems =
_ = [on_problems]
text = file.read_text
Json.parse text . catch Invalid_JSON error->
Error.throw (File_Error.Corrupted_Format file error.to_display_text error)

View File

@ -27,7 +27,9 @@ type OS
os : OS
os = from_text System.os
## Check if the operating system is UNIX.
## PRIVATE
ADVANCED
Check if the operating system is UNIX.
is_unix : Boolean
is_unix = @Builtin_Method "System.is_unix"

View File

@ -26,13 +26,16 @@ type Warning
origin = Runtime.get_stack_trace
attach_with_stacktrace value warning (origin.drop (Index_Sub_Range.First 1))
## ADVANCED
## PRIVATE
ADVANCED
Are any warnings attached to the value?
has_warnings : Any -> Any -> Boolean
has_warnings value warning_type=Any =
Warning.get_all value . any (w-> w.value.is_a warning_type)
## Remove the warnings (either all or of a specified type) attached to the value.
## PRIVATE
ADVANCED
Remove the warnings (either all or of a specified type) attached to the value.
Arguments:
- warning_type: The type to remove if attached to the value. Defaults to all warnings.
@ -50,13 +53,15 @@ type Warning
first = warnings.find (w-> w.value.is_a warning_type) if_missing=Nothing
if first.is_nothing then self else Error.throw first.value
## ADVANCED
## PRIVATE
ADVANCED
Gets all the warnings attached to the given value. Warnings are returned in the
reverse-chronological order with respect to their attachment time.
get_all : Any -> Vector Warning
get_all value = Vector.from_polyglot_array (get_all_array value)
## ADVANCED
## PRIVATE
ADVANCED
Returns `True` if the maximal number of reported warnings for a value has been reached, `False` otherwise.
limit_reached : Any -> Boolean
limit_reached value = @Builtin_Method "Warning.limit_reached"
@ -73,7 +78,8 @@ type Warning
set : Any -> Vector Warning -> Any
set value warnings = set_array value warnings.to_array
## ADVANCED
## PRIVATE
ADVANCED
Returns the provided value with any warnings removed from it.
Arguments:
@ -166,7 +172,8 @@ type Warning
original dataflow error as-is, to preserve its stacktrace.
Nothing -> mapped_warnings_or_error
## ADVANCED
## PRIVATE
ADVANCED
A helper function which selects warnings matching a predicate and returns a
pair whose first element is the original value with the matched warnings
removed and the second element is the list of matched warnings.

View File

@ -29,8 +29,9 @@ type SQLite_Format
## PRIVATE
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> SQLite_Format | Nothing
for_web _ _ =
for_web content_type uri =
## Currently not loading SQLite files automatically.
_ = [content_type, uri]
Nothing
## PRIVATE

View File

@ -35,7 +35,8 @@ type SQL_Type_Mapping
_ = sql_type
Unimplemented.throw "This is an interface only."
## Converts an SQL_Type to a Text representation compatible with the related
## PRIVATE
Converts an SQL_Type to a Text representation compatible with the related
SQL dialect that can be used in SQL expressions like CAST or column
definitions.
sql_type_to_text : SQL_Type -> Text

View File

@ -144,7 +144,8 @@ type SQLite_Dialect
## PRIVATE
make_cast : Internal_Column -> SQL_Type -> (SQL_Expression -> SQL_Type_Reference) -> Internal_Column
make_cast self column target_type _ =
make_cast self column target_type infer_result_type_from_database_callback =
_ = [infer_result_type_from_database_callback]
mapping = self.get_type_mapping
target_value_type = mapping.sql_type_to_value_type target_type
custom_cast = make_custom_cast column target_value_type mapping

View File

@ -94,7 +94,8 @@ type SQLite_Type_Mapping
Database to tell the expected types, because it has been found to be
unreliable in more complex expressions.
infer_return_type : (SQL_Expression -> SQL_Type_Reference) -> Text -> Vector -> SQL_Expression -> SQL_Type_Reference
infer_return_type _ op_name arguments _ =
infer_return_type infer_from_database_callback op_name arguments expression =
_ = [infer_from_database_callback, expression]
handler = operations_map.get op_name (_ -> Error.throw (Illegal_State.Error "Impossible: Unknown operation "+op_name+". This is a bug in the Database library."))
sql_type = handler arguments
SQL_Type_Reference.from_constant sql_type

View File

@ -27,8 +27,9 @@ type Image_File_Format
## PRIVATE
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> Image_File_Format | Nothing
for_web _ _ =
for_web content_type uri =
## Currently not loading Image files automatically. This should be supported later.
_ = [content_type, uri]
Nothing
## PRIVATE

View File

@ -12,12 +12,12 @@
> Example
Calculate the smallest number out of 1 and 2.
Math.min 1 2
1.min 2
> Example
Calculate the largest number out of 1 and 2.
Math.max 1 2
1.max 2
> Example
Calculate the sine of 2.

View File

@ -98,7 +98,7 @@ type Column
col_name = normalize_string_for_display java_col.getName
storage = java_col.getStorage
num_rows = java_col.getSize
display_rows = Math.min num_rows show_rows
display_rows = num_rows.min show_rows
items = Vector.new display_rows num->
row = if storage.isNa num then "Nothing" else
get_item_string storage num
@ -1751,8 +1751,8 @@ type Column
slice : Integer -> Integer -> Column
slice self start end =
length = self.length
offset = Math.max (Math.min start length) 0
limit = Math.max (Math.min (end - offset) (length - offset)) 0
offset = (start.min length).max 0
limit = ((end - offset).min (length - offset)).max 0
Column.Value (self.java_column.slice offset limit)
## Returns the first element in the column, if it exists.

View File

@ -147,7 +147,7 @@ type Table
col_names = ([index.getName] + cols.map .getName) . map normalize_string_for_display
col_vals = cols.map .getStorage
num_rows = self.row_count
display_rows = Math.min num_rows show_rows
display_rows = num_rows.min show_rows
rows = Vector.new display_rows row_num->
cols = col_vals.map col->
if col.isNa row_num then "Nothing" else get_item_string col row_num
@ -1909,8 +1909,8 @@ type Table
slice : Integer -> Integer -> Table
slice self start end =
length = self.row_count
offset = Math.max (Math.min start length) 0
limit = Math.max (Math.min (end - offset) (length - offset)) 0
offset = (start.min length).max 0
limit = ((end - offset).min (length - offset)).max 0
Table.Value (self.java_table.slice offset limit)
## Returns a table containing the rows of `self` table with their order
@ -2058,8 +2058,8 @@ ansi_bold enabled txt =
print_table : Vector Text -> (Vector (Vector Text)) -> Integer -> Boolean -> Text
print_table header rows indices_count format_term =
content_lengths = Vector.new header.length i->
max_row = 0.up_to rows.length . fold 0 a-> j-> Math.max a (rows.at j . at i . characters . length)
Math.max max_row (header.at i . characters . length)
max_row = 0.up_to rows.length . fold 0 a-> j-> a.max (rows.at j . at i . characters . length)
max_row.max (header.at i . characters . length)
header_line = header.zip content_lengths pad . map (ansi_bold format_term) . join ' | '
divider = content_lengths . map (l -> "-".repeat l+2) . join '+'
row_lines = rows.map r->

View File

@ -114,7 +114,7 @@ Table.from_objects value fields=Nothing =
will be named `Column <N>` where `N` is the number of the marked group.
(Group 0 is not included.)
Text.parse_to_table : Text -> Case_Sensitivity -> Boolean -> Problem_Behavior -> Table ! Type_Error | Regex_Syntax_Error | Illegal_Argument
Text.parse_to_table self pattern="." case_sensitivity=Case_Sensitivity.Sensitive parse_values=True on_problems=Report_Warning =
Text.parse_to_table self pattern case_sensitivity=Case_Sensitivity.Sensitive parse_values=True on_problems=Report_Warning =
Parse_To_Table.parse_text_to_table self pattern case_sensitivity parse_values on_problems
## PRIVATE

View File

@ -13,14 +13,14 @@ reconcile_types current new = case current of
Value_Type.Mixed -> Value_Type.Mixed
Value_Type.Integer size -> case new of
Value_Type.Integer new_size ->
Value_Type.Integer (Math.max size new_size)
Value_Type.Integer (max_size size new_size)
Value_Type.Byte -> Value_Type.Integer size
# If we unify integers with floats, we select the default Float 64 regardless of the input sizes.
Value_Type.Float _ -> Value_Type.Float
_ -> Value_Type.Mixed
Value_Type.Float size -> case new of
Value_Type.Float new_size ->
Value_Type.Float (Math.max size new_size)
Value_Type.Float (max_size size new_size)
# If we unify integers with floats, we select the default Float 64 regardless of the input sizes.
Value_Type.Integer _ -> Value_Type.Float
Value_Type.Byte -> Value_Type.Float
@ -55,7 +55,7 @@ reconcile_types current new = case current of
returned.
max_size a b =
if a.is_nothing || b.is_nothing then Nothing else
Math.max a b
if a < b then b else a
## PRIVATE
Finds the most specific value type that will fit all the provided types.

View File

@ -75,7 +75,8 @@ type Delimited_Format
ADVANCED
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> Delimited_Format | Nothing
for_web content_type _ =
for_web content_type uri =
_ = [uri]
parts = content_type.split ";" . map .trim
charset_part = parts.find if_missing=Nothing (x-> x.starts_with "charset=")

View File

@ -63,7 +63,8 @@ type Excel_Format
ADVANCED
If the File_Format supports reading from the web response, return a configured instance.
for_web : Text -> URI -> Excel_Format | Nothing
for_web _ _ =
for_web content_type uri =
_ = [content_type, uri]
## Currently not loading Excel files automatically as these need to be loaded as a connection.
Nothing

View File

@ -15,7 +15,9 @@ polyglot java import org.enso.table.read.ExcelReader
polyglot java import org.apache.poi.ss.usermodel.Workbook
type Excel_Workbook
## Load a File as a connection to an Excel workbook.
## PRIVATE
ADVANCED
Load a File as a connection to an Excel workbook.
Arguments:
- file: The file to load.

View File

@ -33,7 +33,8 @@ make_java_existing_data_mode on_existing_file match_columns = case on_existing_f
Arguments:
write_file : File -> Table -> Existing_File_Behavior -> Excel_Section -> (Boolean|Infer) -> Match_Columns -> Problem_Behavior -> Boolean -> File
write_file file table on_existing_file section headers match_columns _ xls_format=False =
write_file file table on_existing_file section headers match_columns on_problems xls_format=False =
_ = [on_problems]
workbook = if file.exists.not then ExcelWriter.createWorkbook xls_format else
Excel_Reader.handle_reader file stream->(ExcelReader.getWorkbook stream xls_format)

View File

@ -87,6 +87,8 @@ type Ordered_Multi_Value_Key_Comparator
go 0
## PRIVATE
hash _ = Error.throw (Illegal_State.new "Ordered_Multi_Value_Key is not intended for usage in unordered collections.")
hash x =
_ = [x]
Error.throw (Illegal_State.new "Ordered_Multi_Value_Key is not intended for usage in unordered collections.")
Comparable.from (_:Ordered_Multi_Value_Key) = Ordered_Multi_Value_Key_Comparator

View File

@ -105,7 +105,8 @@ Any.should_equal_type self that frames_to_skip=0 = case (self.is_same_object_as
Test.fail msg
## Added so that dataflow errors are not silently lost.
Error.should_equal_type self _ frames_to_skip=0 =
Error.should_equal_type self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value is not equal to the expected value.
@ -131,7 +132,8 @@ Any.should_not_equal self that frames_to_skip=0 = case self != that of
Test.fail msg
## Added so that dataflow errors are not silently lost.
Error.should_not_equal self _ frames_to_skip=0 =
Error.should_not_equal self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value is not equal to the expected type value.
@ -157,7 +159,8 @@ Any.should_not_equal_type self that frames_to_skip=0 = case (self.is_same_object
Test.fail msg
## Added so that dataflow errors are not silently lost.
Error.should_not_equal_type self _ frames_to_skip=0 =
Error.should_not_equal_type self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value is a Text value and starts with `that`.
@ -198,7 +201,9 @@ Any.should_start_with self that frames_to_skip=0 = case self of
example_should_start_with = "Hello World!" . should_start_with "Hello"
Error.should_start_with : Any -> Integer -> Test_Result
Error.should_start_with self _ frames_to_skip=0 = Test.fail_match_on_unexpected_error self 1+frames_to_skip
Error.should_start_with self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value is equal to the expected value.
@ -213,7 +218,9 @@ Error.should_start_with self _ frames_to_skip=0 = Test.fail_match_on_unexpected_
example_should_equal = Examples.add_1_to 1 . should_equal 2
Error.should_equal : Any -> Integer -> Test_Result
Error.should_equal self _ frames_to_skip=0 = Test.fail_match_on_unexpected_error self 1+frames_to_skip
Error.should_equal self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` is within `epsilon` from `that`.
@ -456,7 +463,9 @@ Any.should_contain_the_same_elements_as self that frames_to_skip=0 =
example_should_equal = [1, 2] . should_contain_the_same_elements_as [2, 1]
Error.should_contain_the_same_elements_as : Any -> Integer -> Test_Result
Error.should_contain_the_same_elements_as self _ frames_to_skip=0 = Test.fail_match_on_unexpected_error self 1+frames_to_skip
Error.should_contain_the_same_elements_as self that frames_to_skip=0 =
_ = [that]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value contains an element.
@ -504,7 +513,8 @@ Any.should_contain self element frames_to_skip=0 =
example_should_equal = "foobar".should_contain "foo"
Error.should_contain : Any -> Integer -> Test_Result
Error.should_contain self _ frames_to_skip=0 =
Error.should_contain self element frames_to_skip=0 =
_ = [element]
Test.fail_match_on_unexpected_error self 1+frames_to_skip
## Asserts that `self` value does not contain an element.

View File

@ -1,6 +1,7 @@
from Standard.Base import all
import Standard.Table.Data.Table.Table
## PRIVATE
goal_placeholder = "__$$GOAL$$__"
## PRIVATE

View File

@ -102,7 +102,8 @@ Error.is_valid self = self.is_error.not
- _: a function that will be used to generate return value from a non-error
`self` value.
Error.map_valid : Any -> Any
Error.map_valid self _ = self
Error.map_valid self f =
const self f
## PRIVATE

View File

@ -98,7 +98,7 @@ compute_vertical_indices table start_row end_row start_line lines_to_get =
initial_offset = agg.get 1
result_indices = agg.get 2
lines_in_row = (get_row_height table row_ix) - initial_offset
lines_to_process = Math.min lines_in_row lines_left_to_process
lines_to_process = lines_in_row.min lines_left_to_process
start_line = initial_offset
end_line = start_line + lines_to_process
line_indices = start_line.up_to end_line . to_vector
@ -125,7 +125,7 @@ get_chunks_for_row table row_ix line_ix initial_chunk_offset column_range chunk_
column = table.get column_ix
chunks_in_this_column = (((get_column_width column) / chunk_size).ceil) - chunk_offset
chunks_left = chunks_to_get - processed_chunks_previously
chunks_to_process = Math.min chunks_in_this_column chunks_left
chunks_to_process = chunks_in_this_column.min chunks_left
cell_text = column.at row_ix . to_text
text_line = cell_text.lines.get line_ix
get_chunk_by_index = get_chunk_from_line text_line chunk_size
@ -142,7 +142,7 @@ get_chunks_for_row table row_ix line_ix initial_chunk_offset column_range chunk_
Return the max value in the given vector.
max : Vector Integer -> Integer
max vector =
vector.fold 0 (l -> r -> Math.max l r)
vector.fold 0 (l -> r -> l.max r)
## PRIVATE
Return the longest line in the given text.

View File

@ -54,7 +54,8 @@ prepare_visualization y max_rows=1000 =
result.to_text
## Column Limit
## PRIVATE
Column Limit
max_columns = 250
## PRIVATE

View File

@ -23,16 +23,16 @@ type Message
get_lazy_visualization_text_window text pos size chunk_width =
get_text_chunk = get_item_from text chunk_width
lines = text.lines.length
pos_x = Math.max pos.first 0
pos_y = Math.max pos.second 0
pos_x = pos.first.max 0
pos_y = pos.second.max 0
size_x = size.first
size_y = size.second
x_range = pos_x.up_to (pos_x + size_x)
y_range = pos_y.up_to (Math.min (pos_y + size_y) lines)
y_range = pos_y.up_to ((pos_y + size_y).min lines)
coordinates = x_range.map (x -> y_range.map (y -> [x,y])) . flatten
chunks = coordinates.map (ix -> [ix, (get_text_chunk ix)])
active_lines = y_range.map text.lines.at
max_line_length = (active_lines.map (line -> line.length)).fold 0 (l -> r -> Math.max l r)
max_line_length = (active_lines.map (line -> line.length)).fold 0 (l -> r -> l.max r)
make_grid_visualization_response chunks lines max_line_length
## PRIVATE
@ -56,7 +56,7 @@ get_item_from text chunk_size index =
get_chunk_from_line text chunk_size ix =
upper_bound = text.length
start = ix * chunk_size
end = Math.min (start + chunk_size) upper_bound
end = (start + chunk_size).min upper_bound
range = start.up_to end
if start > text.length then Nothing else
slice_text text [range]

View File

@ -28,7 +28,7 @@ public final class EnsoDate implements TruffleObject {
@Builtin.Method(description = "Return current Date", autoRegister = false)
@CompilerDirectives.TruffleBoundary
public static EnsoDate now() {
public static EnsoDate today() {
return new EnsoDate(LocalDate.now());
}

View File

@ -400,7 +400,7 @@ class ValuesGenerator {
public List<Value> timesAndDates() {
var collect = new ArrayList<Value>();
if (languages.contains(Language.ENSO)) {
collect.add(v(null, "import Standard.Base.Data.Time.Date.Date", "Date.now").type());
collect.add(v(null, "import Standard.Base.Data.Time.Date.Date", "Date.today").type());
collect.add(v(null, "import Standard.Base.Data.Time.Date.Date", "Date.new 1999 3 23").type());
collect.add(v(null, "import Standard.Base.Data.Time.Date_Time.Date_Time", "Date_Time.now").type());
collect.add(v(null, "import Standard.Base.Data.Time.Date_Time.Date_Time", "Date_Time.parse '2021-01-01T00:30:12.7102[UTC]'").type());

View File

@ -1,4 +1,4 @@
import Standard.Base
main =
Standard.Base.Data.Time.Date.Date.now
Standard.Base.Data.Time.Date.Date.today
1

View File

@ -105,7 +105,7 @@ spec =
t.at "d" . value_type . should_equal Value_Type.Char
Test.specify "does not support creating tables with date/time values" <|
t = Table.new [["a", [Date.now]], ["b", [Time_Of_Day.now]], ["c", [Date_Time.now]]]
t = Table.new [["a", [Date.today]], ["b", [Time_Of_Day.now]], ["c", [Date_Time.now]]]
r1 = t.select_into_database_table connection table_name=(Name_Generator.random_name "date-time-table") temporary=True
r1.should_fail_with Unsupported_Database_Operation

View File

@ -21,25 +21,26 @@ spec =
(exclusive_1 == exclusive_1) . should_be_true
(exclusive_1 == exclusive_2) . should_be_false
(inclusive_1 == exclusive_1) . should_be_false
Test.group "Interval" <|
Test.specify "should allow constructing exclusive intervals" <|
interval = Interval.exclusive 1 5
interval = Interval.new 1 5 Interval_Type.Exclusive
interval.start . should_equal (Bound.Exclusive 1)
interval.end . should_equal (Bound.Exclusive 5)
Test.specify "should allow constructing start-exclusive intervals" <|
interval = Interval.start_exclusive 1 5
interval = Interval.new 1 5 Interval_Type.Start_Exclusive
interval.start . should_equal (Bound.Exclusive 1)
interval.end . should_equal (Bound.Inclusive 5)
Test.specify "should allow constructing end-exclusive intervals" <|
interval = Interval.end_exclusive 1 5
interval = Interval.new 1 5
interval.start . should_equal (Bound.Inclusive 1)
interval.end . should_equal (Bound.Exclusive 5)
Test.specify "should allow constructing inclusive intervals" <|
interval = Interval.inclusive 1 5
interval = Interval.new 1 5 Interval_Type.Inclusive
interval.start . should_equal (Bound.Inclusive 1)
interval.end . should_equal (Bound.Inclusive 5)
Test.specify "should allow checking if an interval contains a value of the contained type" <|
interval = Interval.end_exclusive 1 10
interval = Interval.new 1 10
interval.contains 0 . should_be_false
interval.contains 1 . should_be_true
interval.contains 5.5 . should_be_true
@ -47,59 +48,59 @@ spec =
interval.contains 10 . should_be_false
interval.contains 10 . should_be_false
interval_2 = Interval.end_exclusive 0 0
interval_2 = Interval.new 0 0
interval_2.contains -1 . should_be_false
interval_2.contains 0 . should_be_false
interval_2.contains 1 . should_be_false
interval_3 = Interval.end_exclusive 0 1
interval_3 = Interval.new 0 1
interval_3.contains -1 . should_be_false
interval_3.contains 0 . should_be_true
interval_3.contains 0.5 . should_be_true
interval_3.contains 0.99999999 . should_be_true
interval_3.contains 1 . should_be_false
interval_4 = Interval.inclusive 0 0
interval_4 = Interval.new 0 0 Interval_Type.Inclusive
interval_4.contains -1 . should_be_false
interval_4.contains 0 . should_be_true
interval_4.contains 0.00001 . should_be_false
interval_4.contains 1 . should_be_false
interval_5 = Interval.exclusive 0 0
interval_5 = Interval.new 0 0 Interval_Type.Exclusive
interval_5.contains -1 . should_be_false
interval_5.contains 0 . should_be_false
interval_5.contains 1 . should_be_false
interval_6 = Interval.start_exclusive 0 0
interval_6 = Interval.new 0 0 Interval_Type.Start_Exclusive
interval_6.contains -1 . should_be_false
interval_6.contains 0 . should_be_false
interval_6.contains 1 . should_be_false
interval_7 = Interval.start_exclusive 0.123 0.124
interval_7 = Interval.new 0.123 0.124 Interval_Type.Start_Exclusive
interval_7.contains 0.123 . should_be_false
interval_7.contains 0.1235 . should_be_true
interval_7.contains 0.124 . should_be_true
interval_7.contains 1 . should_be_false
(Interval.inclusive 0.1 1) . contains 0.33 . should_be_true
(Interval.new 0.1 1 Interval_Type.Inclusive) . contains 0.33 . should_be_true
Test.specify "can be checked for emptiness" <|
Interval.exclusive 0 0 . is_empty . should_be_true
Interval.exclusive 1 10 . is_empty . should_be_false
Interval.start_exclusive 0 0 . is_empty . should_be_true
Interval.start_exclusive 1 1.1 . is_empty . should_be_false
Interval.end_exclusive 0 0 . is_empty . should_be_true
Interval.end_exclusive 1 10 . is_empty . should_be_false
Interval.inclusive 0 0 . is_empty . should_be_false
Interval.inclusive 0.1 0 . is_empty . should_be_true
Interval.new 0 0 Interval_Type.Exclusive . is_empty . should_be_true
Interval.new 1 10 Interval_Type.Exclusive . is_empty . should_be_false
Interval.new 0 0 Interval_Type.Start_Exclusive . is_empty . should_be_true
Interval.new 1 1.1 Interval_Type.Start_Exclusive . is_empty . should_be_false
Interval.new 0 0 Interval_Type.End_Exclusive . is_empty . should_be_true
Interval.new 1 10 Interval_Type.End_Exclusive . is_empty . should_be_false
Interval.new 0 0 Interval_Type.Inclusive . is_empty . should_be_false
Interval.new 0.1 0 Interval_Type.Inclusive . is_empty . should_be_true
Test.specify "can be checked for non-emptiness" <|
Interval.exclusive 0 0 . not_empty . should_be_false
Interval.inclusive 0 0.001 . not_empty . should_be_true
Interval.exclusive 1 10 . not_empty . should_be_true
Interval.start_exclusive 0 0 . not_empty . should_be_false
Interval.start_exclusive 1 1.1 . not_empty . should_be_true
Interval.end_exclusive 0 0 . not_empty . should_be_false
Interval.end_exclusive 1 10 . not_empty . should_be_true
Interval.inclusive 0 0 . not_empty . should_be_true
Interval.inclusive 10 0 . not_empty . should_be_false
Interval.new 0 0 Interval_Type.Exclusive . not_empty . should_be_false
Interval.new 0 0.001 Interval_Type.Inclusive . not_empty . should_be_true
Interval.new 1 10 Interval_Type.Exclusive . not_empty . should_be_true
Interval.new 0 0 Interval_Type.Start_Exclusive . not_empty . should_be_false
Interval.new 1 1.1 Interval_Type.Start_Exclusive . not_empty . should_be_true
Interval.new 0 0 Interval_Type.End_Exclusive . not_empty . should_be_false
Interval.new 1 10 Interval_Type.End_Exclusive . not_empty . should_be_true
Interval.new 0 0 Interval_Type.Inclusive . not_empty . should_be_true
Interval.new 10 0 Interval_Type.Inclusive . not_empty . should_be_false
main = Test_Suite.run_main spec

View File

@ -1,5 +1,4 @@
from Standard.Base import all
import Standard.Base.Errors.Unimplemented.Unimplemented
import Standard.Base.Data.Noise.Deterministic_Random
@ -10,11 +9,11 @@ spec =
Test.group "Deterministic Random Noise Generator" <|
gen = Deterministic_Random
Test.specify "should always return the same output for the same input" <|
interval = Interval.inclusive 0 1
interval = Interval.new 0 1 Interval_Type.Inclusive
values = Vector.fill 10000 1 . map (gen.step _ interval)
values.all (== values.at 0) . should_be_true
Test.specify "should always produce values within the specified interval" <|
interval = Interval.inclusive -100 100
interval = Interval.new -100 100 Interval_Type.Inclusive
values = 1.up_to 10000 . to_vector . map (gen.step _ interval)
values.all (v -> (v >= -100) && (v <= 100)) . should_be_true

View File

@ -14,7 +14,7 @@ spec = Test.group "Noise" <|
result = 1.noise (gen=My_Generator)
result-result . should_equal 0
Test.specify "should allow the user to specify the interval" <|
interval = Interval.inclusive -250 250
interval = Interval.new -250 250 Interval_Type.Inclusive
values = 1.up_to 10001 . to_vector . map (_.noise interval)
values.all (v -> (v >= -250) && (v <= 250)) . should_be_true

View File

@ -13,7 +13,7 @@ polyglot java import org.enso.base_test_helpers.IntHolder
spec = Test.group "Polyglot" <|
Test.specify "should be able to invoke a polyglot method by name and pass arguments" <|
poly_date = LocalDate.now
date = Date.now.to_date_time
date = Date.today.to_date_time
Polyglot.invoke poly_date "atStartOfDay" [] . should_equal date
Polyglot.invoke poly_date "atStartOfDay" [].to_array . should_equal date

View File

@ -127,7 +127,7 @@ spec =
Meta.is_a err Error . should_be_true
Meta.is_a err Text . should_be_false
Meta.is_a Date.now Date . should_be_true
Meta.is_a Date.today Date . should_be_true
Meta.is_a Date_Time.now Date_Time . should_be_true
Meta.is_a Date_Time.now Date . should_be_false
Meta.is_a Time_Of_Day.now Time_Of_Day . should_be_true
@ -182,8 +182,8 @@ spec =
Meta.type_of True . should_equal_type Boolean
Meta.type_of False . should_not_equal_type Any
(Meta.type_of Date.now) . should_equal_type Date
(Meta.type_of Date.now) . should_not_equal_type Date_Time
(Meta.type_of Date.today) . should_equal_type Date
(Meta.type_of Date.today) . should_not_equal_type Date_Time
(Meta.type_of Date_Time.now) . should_equal_type Date_Time
(Meta.type_of Date_Time.now) . should_not_equal_type Date
(Meta.type_of Time_Of_Day.now) . should_equal_type Time_Of_Day