From 0f51df6c930b88f6b474f134f521ad5a7884f467 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 10:36:32 +0000 Subject: [PATCH 01/27] Improve pretty for `Date_Time` and `Time_Of_Day`. Add widgets for `Date` and `Time_Of_Day`. --- .../Base/0.0.0-dev/src/Data/Time/Date.enso | 16 ++++++++-- .../0.0.0-dev/src/Data/Time/Date_Time.enso | 22 +++++++------- .../0.0.0-dev/src/Data/Time/Time_Of_Day.enso | 30 +++++++++++++------ 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso index 408aded58693..d7e6c66ad4ae 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso @@ -26,7 +26,8 @@ import project.Panic.Panic from project.Data.Boolean import Boolean, False, True from project.Data.Text.Extensions import all from project.Data.Time.Date_Time import ensure_in_epoch -from project.Metadata import Display, Widget +from project.Metadata import Display, make_single_choice, Widget +from project.Metadata.Choice import Option from project.Widget_Helpers import make_date_format_selector polyglot java import java.lang.ArithmeticException @@ -335,7 +336,7 @@ type Date Arguments: - period: the period to add to self. next : Date_Period -> Date - next self period=Date_Period.Day = self + period.to_period + next self period:Date_Period=..Day = self + period.to_period ## GROUP DateTime ICON time @@ -347,7 +348,7 @@ type Date Arguments: - period: the period to add to self. previous : Date_Period -> Date - previous self period=Date_Period.Day = self - period.to_period + previous self period:Date_Period=..Day = self - period.to_period ## GROUP DateTime ICON time @@ -492,6 +493,8 @@ type Date from Standard.Base import Date, Time_Of_Day, Time_Zone example_to_time = Date.new 2020 2 3 . to_date_time Time_Of_Day.new Time_Zone.utc + @time_of_day (Time_Of_Day.default_widget include_now=False) + @zone Time_Zone.default_widget to_date_time : Time_Of_Day -> Time_Zone -> Date_Time to_date_time self (time_of_day=Time_Of_Day.new) (zone=Time_Zone.system) = Time_Utils.make_zoned_date_time self time_of_day zone @@ -831,6 +834,13 @@ type Date pretty : Text pretty self = "(Date.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text + ")" + ## PRIVATE + Gets the default drop down option for Date. + default_widget : Boolean -> Widget + default_widget (include_today:Boolean=False) = + options = [Option "" "Date.new"] + (if include_today then [Option "" "Date.today"] else []) + Widget.Single_Choice values=options display=Display.When_Modified + ## PRIVATE week_days_between start end = ## We split the interval into 3 periods: the first week (containing the diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso index fe47ceb5e309..35ece4ab5765 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso @@ -838,16 +838,18 @@ type Date_Time ## PRIVATE Convert to a Enso code representation of this Time_Of_Day. pretty : Text - pretty self = "(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text - + (if self.hour == 0 then "" else " hour="+self.hour.to_text) - + (if self.minute == 0 then "" else " minute="+self.minute.to_text) - + (if self.second == 0 then "" else " second="+self.second.to_text) - + (if self.millisecond == 0 then "" else " millisecond="+self.millisecond.to_text) - + (if self.microsecond == 0 then "" else " microsecond="+self.microsecond.to_text) - + (if self.nanosecond == 0 then "" else " nanosecond="+self.nanosecond.to_text) - + (if self.zone == Time_Zone.system then "" else " zone="+self.zone.pretty) - + ")" - + pretty self = + parts = Vector.build builder-> + builder.append "(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text" + if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) + if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) + if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) + if self.millisecond != 0 then builder.append ((if builder.length!=4 then " millisecond=" else " ") + self.millisecond.to_text) + if self.microsecond != 0 then builder.append ((if builder.length!=5 then " microsecond=" else " ") + self.microsecond.to_text) + if self.nanosecond != 0 then builder.append ((if builder.length!=6 then " nanosecond=" else " ") + self.nanosecond.to_text) + if self.zone != Time_Zone.system then builder.append ((if builder.length!=7 then " zone=" else " ") + self.zone.pretty) + builder.append ")" + parts.join "" ## PRIVATE Convert to a JavaScript Object representing a Date_Time. diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso index b49ea45eaebd..6fd384154d59 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso @@ -11,6 +11,7 @@ import project.Data.Time.Duration.Duration import project.Data.Time.Period.Period import project.Data.Time.Time_Period.Time_Period import project.Data.Time.Time_Zone.Time_Zone +import project.Data.Vector.Vector import project.Error.Error import project.Errors.Common.Type_Error import project.Errors.Illegal_Argument.Illegal_Argument @@ -20,7 +21,8 @@ import project.Nothing.Nothing import project.Panic.Panic from project.Data.Boolean import Boolean, False, True from project.Data.Text.Extensions import all -from project.Metadata import Display, Widget +from project.Metadata import Display, make_single_choice, Widget +from project.Metadata.Choice import Option from project.Widget_Helpers import make_time_format_selector polyglot java import java.lang.Exception as JException @@ -494,14 +496,24 @@ type Time_Of_Day ## PRIVATE Convert to a Enso code representation of this Time_Of_Day. pretty : Text - pretty self = "(Time_Of_Day.new" - + (if self.hour == 0 then "" else " hour="+self.hour.to_text) - + (if self.minute == 0 then "" else " minute="+self.minute.to_text) - + (if self.second == 0 then "" else " second="+self.second.to_text) - + (if self.millisecond == 0 then "" else " millisecond="+self.millisecond.to_text) - + (if self.microsecond == 0 then "" else " microsecond="+self.microsecond.to_text) - + (if self.nanosecond == 0 then "" else " nanosecond="+self.nanosecond.to_text) - + ")" + pretty self = + parts = Vector.build builder-> + builder.append "(Time_Of_Day.new" + if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) + if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) + if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) + if self.millisecond != 0 then builder.append ((if builder.length!=4 then " millisecond=" else " ") + self.millisecond.to_text) + if self.microsecond != 0 then builder.append ((if builder.length!=5 then " microsecond=" else " ") + self.microsecond.to_text) + if self.nanosecond != 0 then builder.append ((if builder.length!=6 then " nanosecond=" else " ") + self.nanosecond.to_text) + builder.append ")" + parts.join "" + + ## PRIVATE + Gets the default drop down option for Time_Of_Day. + default_widget : Boolean -> Widget + default_widget (include_now:Boolean=False) = + options = [Option "" "Time_Of_Day.new"] + (if include_now then [Option "" "Time_Of_Day.now"] else []) + Widget.Single_Choice values=options display=Display.When_Modified ## PRIVATE Time_Of_Day.from (that:JS_Object) = From 0b6c5ef57954dd356407c9e582c66075e4d86849 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 10:37:18 +0000 Subject: [PATCH 02/27] Improve recovery of widget when a parameter panics. --- .../lib/Standard/Visualization/0.0.0-dev/src/Widgets.enso | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Visualization/0.0.0-dev/src/Widgets.enso b/distribution/lib/Standard/Visualization/0.0.0-dev/src/Widgets.enso index 0a20b2b63f87..1a9c60c4db71 100644 --- a/distribution/lib/Standard/Visualization/0.0.0-dev/src/Widgets.enso +++ b/distribution/lib/Standard/Visualization/0.0.0-dev/src/Widgets.enso @@ -1,5 +1,7 @@ from Standard.Base import all +import Standard.Base.Metadata.Widget import Standard.Base.Errors.Common.Not_Invokable +from Standard.Base.Logging import all from Standard.Base.Meta import Instrumentor from Standard.Table import all @@ -20,7 +22,11 @@ get_widget_json value call_name argument_names uuids="{}" = uuid:Text -> Instrumentor.uuid uuid _ -> Nothing - read_annotation argument = + log_panic argument err = + Widget.log_message "Failed for "+argument+": "+err.payload.to_display_text ..Warning + Nothing + + read_annotation argument = Panic.catch Any handler=(log_panic argument) <| annotation = Warning.clear <| Meta.get_annotation value call_name argument return_target err = err.payload.target Panic.catch Not_Invokable handler=return_target From 157fab87ac0ba9538c01499f313105f737689691 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 11:15:10 +0000 Subject: [PATCH 03/27] Fix Date_Time. --- .../lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso index 35ece4ab5765..a65a2704c037 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso @@ -840,7 +840,7 @@ type Date_Time pretty : Text pretty self = parts = Vector.build builder-> - builder.append "(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text" + builder.append "(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) From 7dbd48c76683d39515942fc19a610eef3673a8c7 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 11:31:49 +0000 Subject: [PATCH 04/27] Add pretty, text and js_object to `Enso_Secret`. --- .../0.0.0-dev/src/Enso_Cloud/Enso_File.enso | 1 + .../0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso | 35 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_File.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_File.enso index f5fc798054d8..bb95c33e56b9 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_File.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_File.enso @@ -530,6 +530,7 @@ type Enso_File "Enso_File "+self.path ## PRIVATE + Converts the file descriptor to a JSON object. to_js_object : JS_Object to_js_object self = JS_Object.from_pairs [["type", "Enso_File"], ["constructor", "new"], ["path", self.path.to_text]] diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso index 538dface7dc4..fdaeca925e60 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso @@ -31,7 +31,19 @@ polyglot java import org.enso.base.enso_cloud.HideableValue.SecretValue ## A reference to a secret stored in the Enso Cloud. type Enso_Secret ## PRIVATE - Value name:Text id:Text path:Enso_Path + private Value internal_name:Text id:Text internal_path:Enso_Path + + ## GROUP Metadata + ICON metadata + The name of the secret. + name : Text + name self = self.internal_name + + ## GROUP Metadata + ICON metadata + The path of the secret. + path : Enso_Path + path self = self.internal_path ## GROUP Output ICON edit @@ -146,6 +158,27 @@ type Enso_Secret EnsoSecretHelper.deleteSecretFromCache self.id self + ## PRIVATE + Returns a text representation of the secret. + to_text : Text + to_text self = "Enso_Secret " + self.path.to_text + + ## PRIVATE + Returns a display text representation of the secret. + to_display_text : Text + to_display_text self = "Enso_Secret {" + self.name + "}" + + ## PRIVATE + Converts the secret to a JSON object. + to_js_object : JS_Object + to_js_object self = + JS_Object.from_pairs [["type", "Enso_Secret"], ["constructor", "get"], ["path", self.path.to_text]] + + ## PRIVATE + Convert to a Enso code representation of this Enso_Secret. + pretty : Text + pretty self = "(Enso_Secret.get " + self.path.pretty + ")" + ## PRIVATE type Enso_Secret_Error ## PRIVATE From 186f7495368648f3f0e50cd27ffc700ed7d1789d Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 13:06:10 +0000 Subject: [PATCH 05/27] Fix pretty on Enso_Secret and HTTP to use `_` for the private methods. --- .../0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso | 2 +- .../Base/0.0.0-dev/src/Network/HTTP.enso | 16 ++++++++-------- test/Base_Tests/src/Network/Http_Spec.enso | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso index fdaeca925e60..7f9f4fb618d6 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso @@ -177,7 +177,7 @@ type Enso_Secret ## PRIVATE Convert to a Enso code representation of this Enso_Secret. pretty : Text - pretty self = "(Enso_Secret.get " + self.path.pretty + ")" + pretty self = "(Enso_Secret.get " + self.path.to_text.pretty + ")" ## PRIVATE type Enso_Secret_Error diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP.enso index 34511c97e7a9..d6d7959c262e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP.enso @@ -322,20 +322,20 @@ type Request_Error ## PRIVATE Access the HTTP's timeout (for testing purposes). -get_timeout : HTTP -> Duration -get_timeout http:HTTP = http.timeout +_get_timeout : HTTP -> Duration +_get_timeout http:HTTP = http.timeout ## PRIVATE Access the HTTP's follow_redirects (for testing purposes). -get_follow_redirects : HTTP -> Boolean -get_follow_redirects http:HTTP = http.follow_redirects +_get_follow_redirects : HTTP -> Boolean +_get_follow_redirects http:HTTP = http.follow_redirects ## PRIVATE Access the HTTP's proxy (for testing purposes). -get_proxy : HTTP -> Proxy -get_proxy http:HTTP = http.proxy +_get_proxy : HTTP -> Proxy +_get_proxy http:HTTP = http.proxy ## PRIVATE Access the HTTP's version (for testing purposes). -get_version : HTTP -> HTTP_Version -get_version http:HTTP = http.version +_get_version : HTTP -> HTTP_Version +_get_version http:HTTP = http.version diff --git a/test/Base_Tests/src/Network/Http_Spec.enso b/test/Base_Tests/src/Network/Http_Spec.enso index bcf256f71fd8..305971af71ec 100644 --- a/test/Base_Tests/src/Network/Http_Spec.enso +++ b/test/Base_Tests/src/Network/Http_Spec.enso @@ -10,7 +10,7 @@ import Standard.Base.Network.HTTP.Request_Body.Request_Body import Standard.Base.Network.HTTP.Request_Error import Standard.Base.Network.Proxy.Proxy import Standard.Base.Runtime.Context -from Standard.Base.Network.HTTP import _resolve_headers, get_follow_redirects, get_proxy, get_timeout, get_version +from Standard.Base.Network.HTTP import _resolve_headers, _get_follow_redirects, _get_proxy, _get_timeout, _get_version from Standard.Test import all from Standard.Test.Execution_Context_Helpers import run_with_and_without_output @@ -65,11 +65,11 @@ add_specs suite_builder = suite_builder.group "HTTP client" pending=pending_has_url group_builder-> group_builder.specify "should create HTTP client with timeout setting" <| http = HTTP.new (timeout = (Duration.new seconds=30)) - (get_timeout http).should_equal (Duration.new seconds=30) + (_get_timeout http).should_equal (Duration.new seconds=30) group_builder.specify "should create HTTP client with follow_redirects setting" <| http = HTTP.new (follow_redirects = False) - (get_follow_redirects http).should_equal False + (_get_follow_redirects http).should_equal False Test.with_retries <| r = http.request (Request.new HTTP_Method.Get base_url_with_slash+"test_redirect") @@ -80,12 +80,12 @@ add_specs suite_builder = group_builder.specify "should create HTTP client with proxy setting" <| proxy_setting = Proxy.Address "example.com" 80 http = HTTP.new (proxy = proxy_setting) - (get_proxy http).should_equal proxy_setting + (_get_proxy http).should_equal proxy_setting group_builder.specify "should create HTTP client with version setting" <| version_setting = HTTP_Version.HTTP_2 http = HTTP.new (version = version_setting) - (get_version http).should_equal version_setting + (_get_version http).should_equal version_setting url_get = base_url_with_slash.if_not_nothing <| base_url_with_slash + "get" suite_builder.group "fetch" pending=pending_has_url group_builder-> From ed6f61baf2aee63764444a5971ee19f5bc9a5efa Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 15:36:48 +0000 Subject: [PATCH 06/27] Fix pretty for Date_Time. Add for Column and Table. --- .../Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso | 2 +- distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso | 7 +++++++ distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso index a65a2704c037..7c4624ce6074 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso @@ -840,7 +840,7 @@ type Date_Time pretty : Text pretty self = parts = Vector.build builder-> - builder.append "(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text + builder.append ("(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text) if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index 53cc25ab3e98..4039142d911b 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -2589,6 +2589,13 @@ type Column data = Statistic.running self.to_vector statistic Column.from_vector name data + ## PRIVATE + pretty : Text + pretty self = + name = self.name.pretty + data = self.to_vector.map .pretty . join ", " + "(Column.from_vector " + name + " [" + data + "])" + ## PRIVATE Folds the vectorized operation over the provided column and values. When more diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 9fd946da0195..569c023c9c7b 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3739,6 +3739,12 @@ type Table if merged_columns.is_empty then problem_builder_for_unification.raise_no_output_columns_with_cause else Table.new merged_columns + ## PRIVATE + pretty : Text + pretty self = + data = self.columns.map c->("[" + c.name.pretty + ", [" + (c.to_vector.map .pretty . join ", ") + "]]") . join ", " + "(Table.new [" + data + "])" + ## PRIVATE A helper to create a new table consisting of slices of the original table. slice_ranges table ranges = From 486aea18998c6386a206f9fa3e7c31acebf4a4ed Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 15:55:49 +0000 Subject: [PATCH 07/27] Add doc comments for pretty. Remove unneeded brackets. --- .../lib/Standard/Base/0.0.0-dev/src/Any.enso | 19 ++++++++++++++----- .../Base/0.0.0-dev/src/Data/Time/Date.enso | 13 +++++++++++-- .../0.0.0-dev/src/Data/Time/Date_Range.enso | 17 +++++++++++++++-- .../0.0.0-dev/src/Data/Time/Date_Time.enso | 14 +++++++++++--- .../0.0.0-dev/src/Data/Time/Time_Of_Day.enso | 14 +++++++++++--- .../0.0.0-dev/src/Data/Time/Time_Zone.enso | 7 ++++--- .../0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso | 6 ++++-- 7 files changed, 70 insertions(+), 20 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Any.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Any.enso index 670972c87b08..0f0196181e4c 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Any.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Any.enso @@ -78,14 +78,23 @@ type Any to_text : Text to_text self = @Builtin_Method "Any.to_text" - ## ICON convert - Generic conversion of an arbitrary Enso value to a corresponding human-readable - representation. + ## GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. > Example - Getting a human-readable representation of the number 7. + Getting the Enso code of the number 7. - 7.to_text + 7.pretty + ## Returns a Text + 7 + + > Example + Getting the Enso code of the text Hello World!. + + "Hello World!".pretty + ## Returns a Text + 'Hello World!' pretty : Text pretty self = @Builtin_Method "Any.pretty" diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso index d7e6c66ad4ae..cb25b88edb03 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date.enso @@ -830,9 +830,18 @@ type Date format.format_date self ## PRIVATE - Convert to a Enso code representation of this Date. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the date 29-October-2024. + + (Date.new 2024 10 29).pretty + ## Returns a Text + Date.new 2024 10 29 pretty : Text - pretty self = "(Date.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text + ")" + pretty self = "Date.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text ## PRIVATE Gets the default drop down option for Date. diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso index d0fba4049fae..356dc4eeb6b1 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso @@ -101,9 +101,22 @@ type Date_Range start + step + "]" ## PRIVATE - Convert to a human-readable representation. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the date range 10-September-2024 until + 29-October-2024. + + (Date.new 2024 09 10).up_to (Date.new 2024 10 29) . pretty + ## Returns a Text + Date_Range.new (Date.new 2024 09 10) (Date.new 2024 10 29) pretty : Text - pretty self = self.to_text + pretty self = + start = self.start.pretty + end = self.end.pretty + "Date_Range.new " + start + " " + end + (if self.period == Date_Period.Day then "" else " " + self.period.pretty) ## PRIVATE Converts this value to a JSON serializable object. diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso index 7c4624ce6074..3871f6560f80 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso @@ -836,11 +836,20 @@ type Date_Time self.format "yyyy-MM-dd "+time_format+zone_format ## PRIVATE - Convert to a Enso code representation of this Time_Of_Day. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the date 29-October-2024 12:34. + + (Date_Time.new 2024 10 29 12 34).pretty + ## Returns a Text + Date_Time.new 2024 10 29 12 34 pretty : Text pretty self = parts = Vector.build builder-> - builder.append ("(Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text) + builder.append ("Date_Time.new " + self.year.to_text + " " + self.month.to_text + " " + self.day.to_text) if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) @@ -848,7 +857,6 @@ type Date_Time if self.microsecond != 0 then builder.append ((if builder.length!=5 then " microsecond=" else " ") + self.microsecond.to_text) if self.nanosecond != 0 then builder.append ((if builder.length!=6 then " nanosecond=" else " ") + self.nanosecond.to_text) if self.zone != Time_Zone.system then builder.append ((if builder.length!=7 then " zone=" else " ") + self.zone.pretty) - builder.append ")" parts.join "" ## PRIVATE diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso index 6fd384154d59..efd8e18ecf89 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Of_Day.enso @@ -494,18 +494,26 @@ type Time_Of_Day format.format_time self ## PRIVATE - Convert to a Enso code representation of this Time_Of_Day. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the time 12:34:00.5 + + (Time_Of_Day.new 12 34 0 500).pretty + ## Returns a Text + Time_Of_Day.new 12 34 millisecond=500 pretty : Text pretty self = parts = Vector.build builder-> - builder.append "(Time_Of_Day.new" + builder.append "Time_Of_Day.new" if self.hour != 0 then builder.append ((if builder.length!=1 then " hour=" else " ") + self.hour.to_text) if self.minute != 0 then builder.append ((if builder.length!=2 then " minute=" else " ") + self.minute.to_text) if self.second != 0 then builder.append ((if builder.length!=3 then " second=" else " ") + self.second.to_text) if self.millisecond != 0 then builder.append ((if builder.length!=4 then " millisecond=" else " ") + self.millisecond.to_text) if self.microsecond != 0 then builder.append ((if builder.length!=5 then " microsecond=" else " ") + self.microsecond.to_text) if self.nanosecond != 0 then builder.append ((if builder.length!=6 then " nanosecond=" else " ") + self.nanosecond.to_text) - builder.append ")" parts.join "" ## PRIVATE diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Zone.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Zone.enso index 9133bfa966e3..75c55383eb9f 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Zone.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Time_Zone.enso @@ -214,10 +214,11 @@ type Time_Zone zone_names = Time_Utils.getZoneNames ## PRIVATE - Convert to a Enso code representation of this Time_Of_Day. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. pretty : Text - pretty self = "(Time_Zone.parse '" + self.zone_id + "')" - + pretty self = "Time_Zone.parse " + self.zone_id.pretty ## PRIVATE Time_Zone.from (that:JS_Object) = diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso index 7f9f4fb618d6..a402ffa10a60 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso @@ -175,9 +175,11 @@ type Enso_Secret JS_Object.from_pairs [["type", "Enso_Secret"], ["constructor", "get"], ["path", self.path.to_text]] ## PRIVATE - Convert to a Enso code representation of this Enso_Secret. + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. pretty : Text - pretty self = "(Enso_Secret.get " + self.path.to_text.pretty + ")" + pretty self = "Enso_Secret.get " + self.path.to_text.pretty ## PRIVATE type Enso_Secret_Error From 4f18c02c03646c1780b3dde2f100b5706253c81b Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 16:16:25 +0000 Subject: [PATCH 08/27] Remove unneeded brackets. --- distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso | 2 +- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index 4039142d911b..c7e94718b905 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -2594,7 +2594,7 @@ type Column pretty self = name = self.name.pretty data = self.to_vector.map .pretty . join ", " - "(Column.from_vector " + name + " [" + data + "])" + "Column.from_vector " + name + " [" + data + "]" ## PRIVATE diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index 569c023c9c7b..cd770f5b2397 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3743,7 +3743,7 @@ type Table pretty : Text pretty self = data = self.columns.map c->("[" + c.name.pretty + ", [" + (c.to_vector.map .pretty . join ", ") + "]]") . join ", " - "(Table.new [" + data + "])" + "Table.new [" + data + "]" ## PRIVATE A helper to create a new table consisting of slices of the original table. From 6df9a715c1e265f4fd34413211ad70b9c4616319 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 17:38:29 +0000 Subject: [PATCH 09/27] Need type name in `pretty` for constructors. --- .../interpreter/node/expression/builtin/text/AnyPrettyNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/text/AnyPrettyNode.java b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/text/AnyPrettyNode.java index 00b2444f5654..2d1301804798 100644 --- a/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/text/AnyPrettyNode.java +++ b/engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/text/AnyPrettyNode.java @@ -47,7 +47,7 @@ Text doOther(Object object) { @CompilerDirectives.TruffleBoundary private Text consName(AtomConstructor constructor) { - return Text.create(constructor.getDisplayName()); + return Text.create(constructor.getType().getName() + "." + constructor.getName()); } @CompilerDirectives.TruffleBoundary From 2b36fc8d14ebce22258ca82b1c06d508c82963be Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 17:39:12 +0000 Subject: [PATCH 10/27] Tests for Date and Time_Of_Day pretty. --- test/Base_Tests/src/Data/Time/Date_Spec.enso | 4 ++++ test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/test/Base_Tests/src/Data/Time/Date_Spec.enso b/test/Base_Tests/src/Data/Time/Date_Spec.enso index 466655891763..448fb5253ac1 100644 --- a/test/Base_Tests/src/Data/Time/Date_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Date_Spec.enso @@ -96,6 +96,10 @@ spec_with suite_builder name create_new_date parse_date pending=Nothing = datetime.date . should_equal date datetime.time_of_day . should_equal time + group_builder.specify "should convert to Enso code" <| + date = create_new_date 2001 12 21 + date.pretty . should_equal "Date.new 2001 12 21" + group_builder.specify "should convert to Json" <| date = create_new_date 2001 12 21 date.to_json.should_equal <| diff --git a/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso b/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso index 23cf7ffd8d99..743793e53231 100644 --- a/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso @@ -58,6 +58,13 @@ specWith suite_builder name create_new_time parse_time nanoseconds_loss_in_preci text = create_new_time 12 20 44 . to_text text . should_equal "12:20:44" + group_builder.specify "should convert to Enso code" <| + create_new_time 12 20 . pretty . should_equal "Time_Of_Day.new 12 20" + create_new_time 12 20 44 . pretty . should_equal "Time_Of_Day.new 12 20 44" + create_new_time 12 20 0 500000000 . pretty . should_equal "Time_Of_Day.new 12 20 millisecond=500" + create_new_time 12 20 0 500000 . pretty . should_equal "Time_Of_Day.new 12 20 microsecond=500" + if nanoseconds_loss_in_precision.not then create_new_time 12 20 0 500 . pretty . should_equal "Time_Of_Day.new 12 20 nanosecond=500" + group_builder.specify "should convert to Json" <| time = create_new_time 1 2 3 time.to_json.should_equal <| From 06c46e6f227bd487972e2ac470ff434b5d256042 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 17:39:58 +0000 Subject: [PATCH 11/27] Vector.pretty and use it from Column and Table. --- .../lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso | 8 ++++++++ distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso | 2 +- distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso index 13d71a160c5d..3880dafc53cf 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Vector.enso @@ -878,6 +878,14 @@ type Vector a short_display_text self (max_entries : Integer = 10) = Array_Like_Helpers.short_display_text self max_entries + ## PRIVATE + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + pretty : Text + pretty self = self.map .pretty . join ", " "[" "]" + + ## ALIAS append, concatenate, union GROUP Operators ICON union diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index c7e94718b905..0f5d4b2a201a 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -2593,7 +2593,7 @@ type Column pretty : Text pretty self = name = self.name.pretty - data = self.to_vector.map .pretty . join ", " + data = self.to_vector.pretty "Column.from_vector " + name + " [" + data + "]" ## PRIVATE diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso index cd770f5b2397..91ac28b900d6 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Table.enso @@ -3742,7 +3742,7 @@ type Table ## PRIVATE pretty : Text pretty self = - data = self.columns.map c->("[" + c.name.pretty + ", [" + (c.to_vector.map .pretty . join ", ") + "]]") . join ", " + data = self.columns.map c->("[" + c.name.pretty + ", " + c.to_vector.pretty + "]") . join ", " "Table.new [" + data + "]" ## PRIVATE From 28c5ddc6dd1590f6faa74c5893800dffcc09477d Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 17:51:36 +0000 Subject: [PATCH 12/27] Range.pretty. --- .../Standard/Base/0.0.0-dev/src/Data/Range.enso | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso index e2e457c7ee1a..cd55ecaced50 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso @@ -574,6 +574,23 @@ type Range step = if self.step.abs == 1 then "" else " by " + self.step.to_display_text start + step + "]" + ## PRIVATE + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the range 1 until 29. + + 1.up_to 29 . pretty + ## Returns a Text + Range.new 1 29 + pretty : Text + pretty self = + start = self.start.pretty + end = self.end.pretty + "Range.new " + start + " " + end + (if self.step.abs == 1 then "" else " " + self.step.pretty) + ## PRIVATE throw_zero_step_error = Error.throw (Illegal_State.Error "A range with step = 0 is ill-formed.") From da1a4a1c798c621f71a39e1d9719dfea1bdda138 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Tue, 29 Oct 2024 22:30:29 +0000 Subject: [PATCH 13/27] Work on tests. Date_Range.pretty fix. --- .../Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso | 2 +- test/Base_Tests/src/Data/Time/Date_Spec.enso | 2 ++ test/Base_Tests/src/Data/Time/Day_Of_Week_Spec.enso | 5 +++++ test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso index 356dc4eeb6b1..83c0ca46804d 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso @@ -116,7 +116,7 @@ type Date_Range pretty self = start = self.start.pretty end = self.end.pretty - "Date_Range.new " + start + " " + end + (if self.period == Date_Period.Day then "" else " " + self.period.pretty) + "Date_Range.new " + start + " " + end + (if self.step == (Period.new days=1) then "" else " " + self.step.pretty) ## PRIVATE Converts this value to a JSON serializable object. diff --git a/test/Base_Tests/src/Data/Time/Date_Spec.enso b/test/Base_Tests/src/Data/Time/Date_Spec.enso index 448fb5253ac1..31f93695dc8e 100644 --- a/test/Base_Tests/src/Data/Time/Date_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Date_Spec.enso @@ -2,6 +2,7 @@ from Standard.Base import all import Standard.Base.Errors.Common.Incomparable_Values import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Time_Error.Time_Error +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -99,6 +100,7 @@ spec_with suite_builder name create_new_date parse_date pending=Nothing = group_builder.specify "should convert to Enso code" <| date = create_new_date 2001 12 21 date.pretty . should_equal "Date.new 2001 12 21" + Debug.eval date.pretty . should_equal date group_builder.specify "should convert to Json" <| date = create_new_date 2001 12 21 diff --git a/test/Base_Tests/src/Data/Time/Day_Of_Week_Spec.enso b/test/Base_Tests/src/Data/Time/Day_Of_Week_Spec.enso index 32f3a14aa4a3..76d6a0145a07 100644 --- a/test/Base_Tests/src/Data/Time/Day_Of_Week_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Day_Of_Week_Spec.enso @@ -1,4 +1,5 @@ from Standard.Base import all +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -11,6 +12,10 @@ add_specs suite_builder = Day_Of_Week.Friday.to_integer . should_equal 6 Day_Of_Week.Saturday.to_integer . should_equal 7 + group_builder.specify "should be able to convert to Enso code" <| + Day_Of_Week.Sunday.pretty . should_equal "Day_Of_Week.Sunday" + Debug.eval Day_Of_Week.Wednesday.pretty . should_equal Day_Of_Week.Wednesday + group_builder.specify "should be able to convert from an Integer" <| Day_Of_Week.from 1 . should_equal Day_Of_Week.Sunday Day_Of_Week.from 4 . should_equal Day_Of_Week.Wednesday diff --git a/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso b/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso index 743793e53231..e4a88f896797 100644 --- a/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Time_Of_Day_Spec.enso @@ -3,6 +3,7 @@ import Standard.Base.Errors.Common.Incomparable_Values import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Illegal_Argument.Illegal_Argument import Standard.Base.Errors.Time_Error.Time_Error +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -65,6 +66,9 @@ specWith suite_builder name create_new_time parse_time nanoseconds_loss_in_preci create_new_time 12 20 0 500000 . pretty . should_equal "Time_Of_Day.new 12 20 microsecond=500" if nanoseconds_loss_in_precision.not then create_new_time 12 20 0 500 . pretty . should_equal "Time_Of_Day.new 12 20 nanosecond=500" + time = create_new_time 12 20 0 500000 + Debug.eval time.pretty . should_equal time + group_builder.specify "should convert to Json" <| time = create_new_time 1 2 3 time.to_json.should_equal <| From 2c37137d3d88966b9ed6d87fbbfae322f5415cbc Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 09:17:24 +0000 Subject: [PATCH 14/27] Add pretty to Array. --- .../lib/Standard/Base/0.0.0-dev/src/Data/Array.enso | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Array.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Array.enso index e8478abde95a..bf1390ab66e2 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Array.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Array.enso @@ -795,6 +795,13 @@ type Array to_display_text : Text to_display_text self = self.short_display_text max_entries=40 + ## PRIVATE + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + pretty : Text + pretty self = self.map .pretty . join ", " "[" "]" + ## ICON column_add Combines all the elements of a non-empty array using a binary operation. If the array is empty, it returns `if_empty`. From 53d42818fc852650a18b63220b7f24dcec1bdc4b Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 10:41:34 +0000 Subject: [PATCH 15/27] Minor fixes. --- .../lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response.enso | 2 +- .../Standard/Base/0.0.0-dev/src/Network/HTTP/Response_Body.enso | 2 +- .../lib/Standard/Base/0.0.0-dev/src/System/File_Format.enso | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response.enso index 8c79be929151..2b09db5597f8 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response.enso @@ -193,7 +193,7 @@ type Response example_write = Data.fetch Examples.geo_data_url . write Examples.scratch_file - @path (Widget.Text_Input display=Display.Always) + @file (Widget.Text_Input display=Display.Always) write : Writable_File -> Existing_File_Behavior -> File write self file:Writable_File on_existing_file=Existing_File_Behavior.Backup = self.body.write file on_existing_file diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response_Body.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response_Body.enso index a7c3477f08c9..31cd11eda675 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response_Body.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Network/HTTP/Response_Body.enso @@ -180,7 +180,7 @@ type Response_Body example_write = Examples.get_geo_data.write Examples.scratch_file - @path (Widget.Text_Input display=Display.Always) + @file (Widget.Text_Input display=Display.Always) write : Writable_File -> Existing_File_Behavior -> File write self file:Writable_File on_existing_file=Existing_File_Behavior.Backup = self.with_stream body_stream-> diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/System/File_Format.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/System/File_Format.enso index 312cc5c70190..85a0522c7752 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/System/File_Format.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/System/File_Format.enso @@ -232,7 +232,7 @@ type Bytes type JSON_Format ## PRIVATE Resolve an unresolved constructor to the actual type. - resolve : Function -> Bytes | Nothing + resolve : Function -> JSON_Format | Nothing resolve constructor = _ = constructor Nothing From 28ea6b0a40ab4bf588125f57e180fca011a69562 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 11:16:45 +0000 Subject: [PATCH 16/27] Add `pretty` to `Period`. Fix `Date_Range.pretty`. Tests for pretty on `Period` and `Date_Range`, --- .../0.0.0-dev/src/Data/Time/Date_Range.enso | 2 +- .../Base/0.0.0-dev/src/Data/Time/Period.enso | 20 +++++++++++++++++++ .../src/Data/Time/Date_Range_Spec.enso | 8 ++++++-- .../Base_Tests/src/Data/Time/Period_Spec.enso | 13 ++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso index 83c0ca46804d..e51d9f12062e 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Range.enso @@ -116,7 +116,7 @@ type Date_Range pretty self = start = self.start.pretty end = self.end.pretty - "Date_Range.new " + start + " " + end + (if self.step == (Period.new days=1) then "" else " " + self.step.pretty) + "Date_Range.new (" + start + ") (" + end + (if self.step == (Period.new days=1) then ")" else ") (" + self.step.pretty + ")") ## PRIVATE Converts this value to a JSON serializable object. diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Period.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Period.enso index 653688641e1e..3199648b14d4 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Period.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Period.enso @@ -209,6 +209,26 @@ type Period if self.days==0 . not then builder.append ["days", self.days] JS_Object.from_pairs v + ## PRIVATE + GROUP convert + ICON enso_logo + Convert the value to a corresponding Enso code representation. + + > Example + Getting the Enso code of the period 1 month and 2 days. + + (Period.new months=1 days=2).pretty + ## Returns a Text + Time_Of_Day.new 12 34 millisecond=500 + pretty : Text + pretty self = + parts = Vector.build builder-> + builder.append "Period.new" + if self.years != 0 then builder.append ((if builder.length!=1 then " years=" else " ") + self.years.to_text) + if self.months != 0 then builder.append ((if builder.length!=2 then " months=" else " ") + self.months.to_text) + if self.days != 0 then builder.append ((if builder.length!=3 then " days=" else " ") + self.days.to_text) + parts.join "" + ## PRIVATE catch_java_exceptions operation ~action = handle_arithmetic_exception caught_panic = diff --git a/test/Base_Tests/src/Data/Time/Date_Range_Spec.enso b/test/Base_Tests/src/Data/Time/Date_Range_Spec.enso index 7c4ebf7efce4..b2b469ae1c61 100644 --- a/test/Base_Tests/src/Data/Time/Date_Range_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Date_Range_Spec.enso @@ -2,6 +2,7 @@ from Standard.Base import all import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Empty_Error.Empty_Error import Standard.Base.Errors.Illegal_Argument.Illegal_Argument +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -194,8 +195,11 @@ add_specs suite_builder = r1.to_text . should_equal '(Date_Range from 2020-02-28 up to 2020-03-02)' r2.to_text . should_equal '(Date_Range from 2020-03-20 down to 2020-02-29 by 7D)' - r1.pretty . should_equal r1.to_text - r2.pretty . should_equal r2.to_text + r1.pretty . should_equal 'Date_Range.new (Date.new 2020 2 28) (Date.new 2020 3 2)' + (Debug.eval r1.pretty) . should_equal r1 + + r2.pretty . should_equal 'Date_Range.new (Date.new 2020 3 20) (Date.new 2020 2 29) (Period.new days=7)' + (Debug.eval r2.pretty) . should_equal r2 r1.to_display_text . should_equal '[2020-02-28 .. 2020-03-02]' r2.to_display_text . should_equal '[2020-03-20 .. 2020-02-29 by -7D]' diff --git a/test/Base_Tests/src/Data/Time/Period_Spec.enso b/test/Base_Tests/src/Data/Time/Period_Spec.enso index f61c4abfbbb8..a1c841add966 100644 --- a/test/Base_Tests/src/Data/Time/Period_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Period_Spec.enso @@ -1,5 +1,6 @@ from Standard.Base import all import Standard.Base.Errors.Common.Incomparable_Values +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -50,6 +51,18 @@ add_specs suite_builder = Period.new years=2 days=3 . to_display_text . should_equal "2Y 0M 3D" Period.new days=18 . to_display_text . should_equal "18D" + group_builder.specify "should render to Enso code" <| + Period.new . pretty . should_equal "Period.new" + Period.new years=2 . pretty . should_equal "Period.new 2" + Period.new months=24 . pretty . should_equal "Period.new months=24" + Period.new months=4 . pretty . should_equal "Period.new months=4" + Period.new years=1 months=6 . pretty . should_equal "Period.new 1 6" + Period.new years=2 days=3 . pretty . should_equal "Period.new 2 days=3" + Period.new days=18 . pretty . should_equal "Period.new days=18" + + period = Period.new years=2 days=3 + Debug.eval period.pretty . should_equal period + main filter=Nothing = suite = Test.build suite_builder-> add_specs suite_builder From 99291ad60b5fb3cee25a8c73d54abcfe24208844 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 11:40:15 +0000 Subject: [PATCH 17/27] Fix `Date_Time.pretty`. Tests for `Date_Time.pretty`. --- .../Base/0.0.0-dev/src/Data/Time/Date_Time.enso | 2 +- test/Base_Tests/src/Data/Time/Date_Time_Spec.enso | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso index 3871f6560f80..92a1bb70fdc9 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Time/Date_Time.enso @@ -856,7 +856,7 @@ type Date_Time if self.millisecond != 0 then builder.append ((if builder.length!=4 then " millisecond=" else " ") + self.millisecond.to_text) if self.microsecond != 0 then builder.append ((if builder.length!=5 then " microsecond=" else " ") + self.microsecond.to_text) if self.nanosecond != 0 then builder.append ((if builder.length!=6 then " nanosecond=" else " ") + self.nanosecond.to_text) - if self.zone != Time_Zone.system then builder.append ((if builder.length!=7 then " zone=" else " ") + self.zone.pretty) + if self.zone != Time_Zone.system then builder.append ((if builder.length!=7 then " zone=(" else " (") + self.zone.pretty + ")") parts.join "" ## PRIVATE diff --git a/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso b/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso index b5617f721092..517da99093c7 100644 --- a/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso @@ -2,6 +2,7 @@ from Standard.Base import all import Standard.Base.Errors.Common.Incomparable_Values import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Time_Error.Time_Error +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -119,6 +120,17 @@ spec_with suite_builder name create_new_datetime parse_datetime nanoseconds_loss text = create_new_datetime 1970 (zone = Time_Zone.utc) . to_text text . should_equal "1970-01-01 00:00:00Z[UTC]" + group_builder.specify "should convert to Enso code" <| + create_new_datetime 1970 . pretty . should_equal "Date_Time.new 1970 1 1" + create_new_datetime 1923 9 24 . pretty . should_equal "Date_Time.new 1923 9 24" + create_new_datetime 1923 9 24 12 20 44 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 44" + create_new_datetime 1923 9 24 12 20 nanosecond=500000000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 millisecond=500" + create_new_datetime 1923 9 24 12 20 nanosecond=500000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 microsecond=500" + create_new_datetime 1923 9 24 12 20 nanosecond=500 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 nanosecond=500" + + date_time = create_new_datetime 1970 12 21 11 23 45 nanosecond=123456789 zone=Time_Zone.utc + Debug.eval date_time.pretty . should_equal date_time + group_builder.specify "should convert to Json" <| time = create_new_datetime 1970 12 21 (zone = Time_Zone.utc) time.to_json.should_equal <| From ec1ba1fc7ca494bf74c69cd970a4503e286e0b50 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 14:21:42 +0000 Subject: [PATCH 18/27] Fix 'Column.pretty'. --- distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso index 0f5d4b2a201a..5a838234eecb 100644 --- a/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso +++ b/distribution/lib/Standard/Table/0.0.0-dev/src/Column.enso @@ -2594,7 +2594,7 @@ type Column pretty self = name = self.name.pretty data = self.to_vector.pretty - "Column.from_vector " + name + " [" + data + "]" + "Column.from_vector " + name + " " + data ## PRIVATE From 8b7213886cd8c420e14320a3886386451d68c14c Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 16:42:34 +0000 Subject: [PATCH 19/27] Fix `Range.pretty` and test. --- .../Base/0.0.0-dev/src/Data/Range.enso | 3 ++- test/Base_Tests/src/Data/Range_Spec.enso | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso index cd55ecaced50..03ff8572c75a 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso @@ -1,4 +1,5 @@ import project.Any.Any +import project.Any.Any import project.Data.Array_Proxy.Array_Proxy import project.Data.Filter_Condition.Filter_Condition import project.Data.Numbers.Integer @@ -589,7 +590,7 @@ type Range pretty self = start = self.start.pretty end = self.end.pretty - "Range.new " + start + " " + end + (if self.step.abs == 1 then "" else " " + self.step.pretty) + "Range.new " + start + " " + end + (if self.step.abs == 1 then "" else " step=" + self.step.abs.pretty) ## PRIVATE throw_zero_step_error = Error.throw (Illegal_State.Error "A range with step = 0 is ill-formed.") diff --git a/test/Base_Tests/src/Data/Range_Spec.enso b/test/Base_Tests/src/Data/Range_Spec.enso index 719b0a636dc5..039298607ceb 100644 --- a/test/Base_Tests/src/Data/Range_Spec.enso +++ b/test/Base_Tests/src/Data/Range_Spec.enso @@ -7,6 +7,7 @@ import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Common.Unsupported_Argument_Types import Standard.Base.Errors.Illegal_Argument.Illegal_Argument import Standard.Base.Errors.Illegal_State.Illegal_State +import Standard.Base.Runtime.Debug from Standard.Test import all @@ -559,6 +560,24 @@ add_specs suite_builder = suite_builder.group "Range" group_builder-> invalid_range . find _->True . should_fail_with Illegal_State invalid_range . contains 0 . should_fail_with Illegal_State + group_builder.specify "should define friendly text representations" <| + range = 1.up_to 100 + range_2 = 0.up_to 10 . with_step 2 + range_3 = 20.down_to 0 . with_step 3 + + range.to_text . should_equal "(Between 1 10 1)" + range_2.to_text . should_equal "(Between 0 10 2)" + range_3.to_text . should_equal "(Between 20 0 -3)" + + range.to_display_text . should_equal "[1 .. 10]" + range_2.to_display_text . should_equal "[0 .. 10 by 2]" + range_3.to_display_text . should_equal "[20 .. 0 by -3]" + + range.pretty . should_equal "Range.new 1 10" + range_2.pretty . should_equal "Range.new 0 10 step=2" + range_3.pretty . should_equal "Range.new 20 0 step=3" + Debug.eval range_3.pretty . should_equal range_3 + main filter=Nothing = suite = Test.build suite_builder-> add_specs suite_builder From 33c0657b7a8c66d1fee71d3359f78572e0794ee3 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 16:50:32 +0000 Subject: [PATCH 20/27] Remove dupe import. Test for `Vector.pretty`. --- .../lib/Standard/Base/0.0.0-dev/src/Data/Range.enso | 1 - test/Base_Tests/src/Data/Vector_Spec.enso | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso index 03ff8572c75a..8c588cb434cd 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Data/Range.enso @@ -1,5 +1,4 @@ import project.Any.Any -import project.Any.Any import project.Data.Array_Proxy.Array_Proxy import project.Data.Filter_Condition.Filter_Condition import project.Data.Numbers.Integer diff --git a/test/Base_Tests/src/Data/Vector_Spec.enso b/test/Base_Tests/src/Data/Vector_Spec.enso index fca7f5bbf0b2..97fba3a36a9e 100644 --- a/test/Base_Tests/src/Data/Vector_Spec.enso +++ b/test/Base_Tests/src/Data/Vector_Spec.enso @@ -12,6 +12,7 @@ import Standard.Base.Errors.Common.Not_Found import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Illegal_Argument.Illegal_Argument import Standard.Base.Errors.Unimplemented.Unimplemented +import Standard.Base.Runtime.Debug import Standard.Base.Runtime.Ref.Ref import Standard.Base.Runtime.State from Standard.Base.Panic import Wrapped_Dataflow_Error @@ -1243,6 +1244,11 @@ add_specs suite_builder = [Nothing].pretty.should_equal "[Nothing]" [True, False, 'a'].pretty . should_equal "[True, False, 'a']" [Foo.Value True].pretty . should_equal "[(Foo.Value True)]" + [Date.new 2022 1 1].pretty . should_equal "[Date.new 2022 1 1]" + + mixed = [1, 2, 'a', (Foo.Value True), Date.new 2022 1 1, Nothing] + mixed.pretty . should_equal "[1, 2, 'a', (Foo.Value True), Date.new 2022 1 1, Nothing]" + Debug.eval (mixed.pretty) . should_equal [1, 2, 'a', Foo.Value True, Date.new 2022 1 1, Nothing] type_spec suite_builder "Use Vector as vectors" identity type_spec suite_builder "Use Array as vectors" (v -> v.to_array) From 05d97e66b148da7e2bb561a6042dfef4f4dfca99 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 17:30:55 +0000 Subject: [PATCH 21/27] Update distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Radosław Waśko --- .../Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso index a402ffa10a60..33ee5cb13487 100644 --- a/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso +++ b/distribution/lib/Standard/Base/0.0.0-dev/src/Enso_Cloud/Enso_Secret.enso @@ -42,8 +42,8 @@ type Enso_Secret ## GROUP Metadata ICON metadata The path of the secret. - path : Enso_Path - path self = self.internal_path + path : Text + path self = self.internal_path.to_text ## GROUP Output ICON edit From d24b95c412f6fe284d024338fe396d42b9801b09 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 17:39:39 +0000 Subject: [PATCH 22/27] Test for `Array.pretty`. --- test/Base_Tests/src/Data/Array_Spec.enso | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/Base_Tests/src/Data/Array_Spec.enso b/test/Base_Tests/src/Data/Array_Spec.enso index 74799f5f26fc..d08ad876e342 100644 --- a/test/Base_Tests/src/Data/Array_Spec.enso +++ b/test/Base_Tests/src/Data/Array_Spec.enso @@ -49,6 +49,14 @@ add_specs suite_builder = make_enso_array [] . reduce (+) . should_fail_with (Empty_Error.Error Array) make_enso_array [] . reduce (+) 0 . should_equal 0 + group_builder.specify "should have a well-defined debug-printing method" <| + ## Enso arrays should be coded as Vectors when Enso code is generated. + make_enso_array [] . pretty . should_equal "[]" + make_enso_array [1,2,3] . pretty . should_equal "[1, 2, 3]" + make_enso_array [Nothing] . pretty . should_equal "[Nothing]" + make_enso_array [True, False, 'a'] . pretty . should_equal "[True, False, 'a']" + make_enso_array [Date.new 2022 1 1] . pretty . should_equal "[Date.new 2022 1 1]" + suite_builder.group "Compare functionality with Vector" group_builder-> group_builder.specify "compare methods" <| vector_methods = Meta.meta Vector . methods . sort From 32ef62dcd4d8c34fc82b6031a06d73de68041102 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 18:13:32 +0000 Subject: [PATCH 23/27] Test for `Column.pretty` and `Table.pretty`. --- .../Table_Tests/src/In_Memory/Column_Spec.enso | 15 +++++++++++++++ test/Table_Tests/src/In_Memory/Table_Spec.enso | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/test/Table_Tests/src/In_Memory/Column_Spec.enso b/test/Table_Tests/src/In_Memory/Column_Spec.enso index f788d10fedc5..025c47abb05f 100644 --- a/test/Table_Tests/src/In_Memory/Column_Spec.enso +++ b/test/Table_Tests/src/In_Memory/Column_Spec.enso @@ -1,4 +1,5 @@ from Standard.Base import all +import Standard.Base.Runtime.Debug import project.Util @@ -257,6 +258,20 @@ add_specs suite_builder = r2 = Column.from_vector "X" [] (Value_Type.Char size=0 variable_length=True) r2.should_fail_with Illegal_Argument + group_builder.specify "should be able to serialize to Enso code" <| + c1 = Column.from_vector "X" [1, 2] Value_Type.Float + c1.pretty . should_equal 'Column.from_vector \'X\' [1.0, 2.0]' + Debug.eval c1.pretty . should_equal c1 + + c2 = Column.from_vector "X" ["a", 42] + c2.pretty . should_equal 'Column.from_vector \'X\' [\'a\', 42]' + + c3 = Column.from_vector "X" ["aaa", "bbb"] + c3.pretty . should_equal 'Column.from_vector \'X\' [\'aaa\', \'bbb\']' + + c4 = Column.from_vector "X" [Time_Of_Day.new 10 11 12, Time_Of_Day.new 11 30] + c4.pretty . should_equal 'Column.from_vector \'X\' [Time_Of_Day.new 10 11 12, Time_Of_Day.new 11 30]' + suite_builder.group "Rounding" group_builder-> group_builder.specify "should be able to round a column of decimals" <| Column.from_vector "foo" [1.2, 2.3, 2.5, 3.6] . round . should_equal (Column.from_vector "round([foo])" [1, 2, 3, 4]) diff --git a/test/Table_Tests/src/In_Memory/Table_Spec.enso b/test/Table_Tests/src/In_Memory/Table_Spec.enso index 50ea98631405..fecd48c0ff0c 100644 --- a/test/Table_Tests/src/In_Memory/Table_Spec.enso +++ b/test/Table_Tests/src/In_Memory/Table_Spec.enso @@ -4,6 +4,7 @@ import Standard.Base.Errors.Common.Incomparable_Values import Standard.Base.Errors.Common.Index_Out_Of_Bounds import Standard.Base.Errors.Common.Type_Error import Standard.Base.Errors.Illegal_Argument.Illegal_Argument +import Standard.Base.Runtime.Debug from Standard.Table import Table, Column, Sort_Column, Aggregate_Column, Blank_Selector, Value_Type from Standard.Table.Errors import Invalid_Column_Names, Duplicate_Output_Column_Names, No_Input_Columns_Selected, Missing_Input_Columns, No_Such_Column, Floating_Point_Equality, Invalid_Value_Type, Row_Count_Mismatch @@ -88,6 +89,23 @@ add_specs suite_builder = r2.at "foo" . to_vector . should_equal [] r2.at "bar" . to_vector . should_equal [] + group_builder.specify "should allow creating Enso code from a Table" <| + r = Table.new [["foo", [1, 2, 3]], ["bar", [False, True, False]]] + r.pretty . should_equal "Table.new [['foo', [1, 2, 3]], ['bar', [False, True, False]]]" + Debug.eval r.pretty . should_equal r + + r2 = Table.new [["foo", []], ["bar", []]] + r2.pretty . should_equal "Table.new [['foo', []], ['bar', []]]" + Debug.eval r2.pretty . should_equal r2 + + r3 = Table.new [["date", [Date.new 2022 8 27, Date.new 1999 1 1]], ["time", [Time_Of_Day.new 18, Time_Of_Day.new 1 2 34]]] + r3.pretty . should_equal "Table.new [['date', [Date.new 2022 8 27, Date.new 1999 1 1]], ['time', [Time_Of_Day.new 18, Time_Of_Day.new 1 2 34]]]" + Debug.eval r3.pretty . should_equal r3 + + r4 = Table.new [["foo", [1, 2, 3]], ["bar", [False, True, False]], ["date", [Date.new 2022 8 27, Date.new 1999 1 1, Date.new 2012 1 23]], ["time", [Time_Of_Day.new 18, Time_Of_Day.new 1 2 34, Time_Of_Day.new 12 0]]] + r4.pretty . should_equal "Table.new [['foo', [1, 2, 3]], ['bar', [False, True, False]], ['date', [Date.new 2022 8 27, Date.new 1999 1 1, Date.new 2012 1 23]], ['time', [Time_Of_Day.new 18, Time_Of_Day.new 1 2 34, Time_Of_Day.new 12]]]" + Debug.eval r4.pretty . should_equal r4 + group_builder.specify "should handle error scenarios gracefully" <| Table.new [["X", [1,2,3]], ["Y", [4]]] . should_fail_with Illegal_Argument Table.new [["X", [1]], ["X", [2]]] . should_fail_with Illegal_Argument From 30e4f90e4fff73130c02736a394f2c70244217dc Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 20:14:32 +0000 Subject: [PATCH 24/27] Update test/Base_Tests/src/Data/Range_Spec.enso --- test/Base_Tests/src/Data/Range_Spec.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Base_Tests/src/Data/Range_Spec.enso b/test/Base_Tests/src/Data/Range_Spec.enso index 039298607ceb..fec7b4a30a10 100644 --- a/test/Base_Tests/src/Data/Range_Spec.enso +++ b/test/Base_Tests/src/Data/Range_Spec.enso @@ -565,7 +565,7 @@ add_specs suite_builder = suite_builder.group "Range" group_builder-> range_2 = 0.up_to 10 . with_step 2 range_3 = 20.down_to 0 . with_step 3 - range.to_text . should_equal "(Between 1 10 1)" + range.to_text . should_equal "(Between 1 100 1)" range_2.to_text . should_equal "(Between 0 10 2)" range_3.to_text . should_equal "(Between 20 0 -3)" From 6f71860de3d5ad2fe9ae6df332085d1aa08a9d0c Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 20:15:01 +0000 Subject: [PATCH 25/27] Update test/Base_Tests/src/Data/Range_Spec.enso --- test/Base_Tests/src/Data/Range_Spec.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Base_Tests/src/Data/Range_Spec.enso b/test/Base_Tests/src/Data/Range_Spec.enso index fec7b4a30a10..b8872bb0a369 100644 --- a/test/Base_Tests/src/Data/Range_Spec.enso +++ b/test/Base_Tests/src/Data/Range_Spec.enso @@ -569,7 +569,7 @@ add_specs suite_builder = suite_builder.group "Range" group_builder-> range_2.to_text . should_equal "(Between 0 10 2)" range_3.to_text . should_equal "(Between 20 0 -3)" - range.to_display_text . should_equal "[1 .. 10]" + range.to_display_text . should_equal "[1 .. 100]" range_2.to_display_text . should_equal "[0 .. 10 by 2]" range_3.to_display_text . should_equal "[20 .. 0 by -3]" From 3fd6a95b2182e8d2a98f4b424e0474f4c69006fa Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 20:15:32 +0000 Subject: [PATCH 26/27] Update test/Base_Tests/src/Data/Range_Spec.enso --- test/Base_Tests/src/Data/Range_Spec.enso | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Base_Tests/src/Data/Range_Spec.enso b/test/Base_Tests/src/Data/Range_Spec.enso index b8872bb0a369..a80a5cd52a0f 100644 --- a/test/Base_Tests/src/Data/Range_Spec.enso +++ b/test/Base_Tests/src/Data/Range_Spec.enso @@ -573,7 +573,7 @@ add_specs suite_builder = suite_builder.group "Range" group_builder-> range_2.to_display_text . should_equal "[0 .. 10 by 2]" range_3.to_display_text . should_equal "[20 .. 0 by -3]" - range.pretty . should_equal "Range.new 1 10" + range.pretty . should_equal "Range.new 1 100" range_2.pretty . should_equal "Range.new 0 10 step=2" range_3.pretty . should_equal "Range.new 20 0 step=3" Debug.eval range_3.pretty . should_equal range_3 From 8fd61aaa0ceb519f060aaca7b298d1fd30977e27 Mon Sep 17 00:00:00 2001 From: James Dunkerley Date: Wed, 30 Oct 2024 21:24:06 +0000 Subject: [PATCH 27/27] Fix tests. --- test/Base_Tests/src/Data/Time/Date_Time_Spec.enso | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso b/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso index 517da99093c7..328a2429af92 100644 --- a/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso +++ b/test/Base_Tests/src/Data/Time/Date_Time_Spec.enso @@ -124,9 +124,10 @@ spec_with suite_builder name create_new_datetime parse_datetime nanoseconds_loss create_new_datetime 1970 . pretty . should_equal "Date_Time.new 1970 1 1" create_new_datetime 1923 9 24 . pretty . should_equal "Date_Time.new 1923 9 24" create_new_datetime 1923 9 24 12 20 44 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 44" - create_new_datetime 1923 9 24 12 20 nanosecond=500000000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 millisecond=500" - create_new_datetime 1923 9 24 12 20 nanosecond=500000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 microsecond=500" - create_new_datetime 1923 9 24 12 20 nanosecond=500 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 nanosecond=500" + if nanoseconds_loss_in_precision.not then + create_new_datetime 1923 9 24 12 20 nanosecond=500000000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 millisecond=500" + create_new_datetime 1923 9 24 12 20 nanosecond=500000 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 microsecond=500" + create_new_datetime 1923 9 24 12 20 nanosecond=500 . pretty . should_equal "Date_Time.new 1923 9 24 12 20 nanosecond=500" date_time = create_new_datetime 1970 12 21 11 23 45 nanosecond=123456789 zone=Time_Zone.utc Debug.eval date_time.pretty . should_equal date_time