From 483810c2c0bb74f76e6a8d292b48382a9bf52845 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Sun, 22 Dec 2024 10:37:31 +0000 Subject: [PATCH] split Util to Quantifer and Time --- .../javac\360\237\226\211/Mosaic_Logger.java" | 37 ++---------------- .../Mosaic_Quantifier.java" | 12 +----- .../javac\360\237\226\211/Mosaic_Time.java" | 13 ++++++ .../tool\360\237\226\211/gather_third_party" | 4 +- "document\360\237\226\211/LICENSE.txt" | 1 + "document\360\237\226\211/README.txt" | 1 + release/Mosaic.jar | Bin 18996 -> 20124 bytes .../javac\360\237\226\211/Dispatcher_0.java" | 6 +-- .../javac\360\237\226\211/Dispatcher_1.java" | 2 +- .../javac\360\237\226\211/Dispatcher_3.java" | 24 ++++++------ "tester/javac\360\237\226\211/IO.java" | 4 +- "tester/javac\360\237\226\211/Util.java" | 30 +++++++------- "tester/javac\360\237\226\211/smoke.java" | 4 +- "tester/tool\360\237\226\211/run_jdb" | 12 ------ 14 files changed, 57 insertions(+), 93 deletions(-) rename "developer/javac\360\237\226\211/Mosaic_Util.java" => "developer/javac\360\237\226\211/Mosaic_Quantifier.java" (82%) create mode 100644 "developer/javac\360\237\226\211/Mosaic_Time.java" create mode 120000 "document\360\237\226\211/LICENSE.txt" create mode 120000 "document\360\237\226\211/README.txt" delete mode 100755 "tester/tool\360\237\226\211/run_jdb" diff --git "a/developer/javac\360\237\226\211/Mosaic_Logger.java" "b/developer/javac\360\237\226\211/Mosaic_Logger.java" index 014d732..1abb5c1 100644 --- "a/developer/javac\360\237\226\211/Mosaic_Logger.java" +++ "b/developer/javac\360\237\226\211/Mosaic_Logger.java" @@ -3,19 +3,13 @@ package com.ReasoningTechnology.Mosaic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.time.Instant; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; - public class Mosaic_Logger{ private static final Logger LOGGER = LoggerFactory.getLogger(Mosaic_Logger.class); - private static final DateTimeFormatter ISO_UTC_FORMATTER = - DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC); // Formats and logs an output related to a specific test public static void output(String test_name, String stream, String output_data){ - String timestamp = iso_utc_time(); + String timestamp = Mosaic_Time.iso_UTC_time(); String formatted_log = String.format( "\n%s -----------------------------------------------------------\n" + "Test: %s\n" + @@ -29,7 +23,7 @@ public class Mosaic_Logger{ // Logs a general message for a test public static void message(String test_name, String message){ - String timestamp = iso_utc_time(); + String timestamp = Mosaic_Time.iso_UTC_time(); String formatted_log = String.format( "\n%s -----------------------------------------------------------\n" + "Test: %s\n" + @@ -41,7 +35,7 @@ public class Mosaic_Logger{ } public static void error(String test_name, String message, Throwable error){ - String timestamp = iso_utc_time(); + String timestamp = Mosaic_Time.iso_UTC_time(); String formatted_log = String.format( "\n%s -----------------------------------------------------------\n" + "Test: %s\n" + @@ -55,29 +49,4 @@ public class Mosaic_Logger{ LOGGER.error(formatted_log, error); } - /* - // Logs an error with stack trace - public static void error(String test_name, String message, Throwable error){ - String timestamp = iso_utc_time(); - StringBuilder stack_trace = new StringBuilder(); - for (StackTraceElement element : error.getStackTrace()){ - stack_trace.append(element.toString()).append("\n"); - } - - String formatted_log = String.format( - "\n%s -----------------------------------------------------------\n" + - "Test: %s\n" + - "Message:\n%s\n" + - "Error:\n%s\n", - timestamp, test_name, message, stack_trace - ); - - LOGGER.error(formatted_log); - } - */ - - // Utility to fetch the current time in ISO UTC format - private static String iso_utc_time(){ - return ISO_UTC_FORMATTER.format(Instant.now()); - } } diff --git "a/developer/javac\360\237\226\211/Mosaic_Util.java" "b/developer/javac\360\237\226\211/Mosaic_Quantifier.java" similarity index 82% rename from "developer/javac\360\237\226\211/Mosaic_Util.java" rename to "developer/javac\360\237\226\211/Mosaic_Quantifier.java" index 1fba0cc..493b3c0 100644 --- "a/developer/javac\360\237\226\211/Mosaic_Util.java" +++ "b/developer/javac\360\237\226\211/Mosaic_Quantifier.java" @@ -1,11 +1,8 @@ package com.ReasoningTechnology.Mosaic; -import java.time.Instant; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; import java.util.function.Predicate; -public class Mosaic_Util{ +public class Mosaic_Quantifier{ // Linear search with a predicate public static T find( T[] elements ,Predicate predicate ){ @@ -21,6 +18,7 @@ public class Mosaic_Util{ } // True when it does a search and does not find a false value; otherwise false. + // Hence, all true for the empty set is false, which is appropriate for testing. public static Boolean all( Object[] elements ){ return elements.length > 0 && find( elements ,element -> !(element instanceof Boolean) || !(Boolean) element ) == null; } @@ -41,10 +39,4 @@ public class Mosaic_Util{ } } - public static String iso_utc_time(){ - return Instant.now().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT); - } - - - } diff --git "a/developer/javac\360\237\226\211/Mosaic_Time.java" "b/developer/javac\360\237\226\211/Mosaic_Time.java" new file mode 100644 index 0000000..6e30236 --- /dev/null +++ "b/developer/javac\360\237\226\211/Mosaic_Time.java" @@ -0,0 +1,13 @@ +package com.ReasoningTechnology.Mosaic; + +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + +public class Mosaic_Time{ + + public static String iso_UTC_time(){ + return Instant.now().atOffset(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT); + } + +} diff --git "a/developer/tool\360\237\226\211/gather_third_party" "b/developer/tool\360\237\226\211/gather_third_party" index e2c9bd9..1e81ace 100755 --- "a/developer/tool\360\237\226\211/gather_third_party" +++ "b/developer/tool\360\237\226\211/gather_third_party" @@ -1,7 +1,7 @@ #!/bin/env bash script_afp=$(realpath "${BASH_SOURCE[0]}") -# This script expands Mosaic third party projects onto the scratchpad. This is done before releasing or running local ad hoc tests, so that the third party tools will be present. +# This script expands Mosaic third party projects onto the scratchpad. This is done before releasing or running local ad hoc tests, so that the third party tools will be present. I.e. this is for creating a 'fat' jar. # Input guards @@ -13,7 +13,7 @@ script_afp=$(realpath "${BASH_SOURCE[0]}") cd "$REPO_HOME"/developer -# Link sources into the package tree +# Expand the third party tools into the package tree echo "Expanding .jar files to be included with Mosaic into scratchpad." diff --git "a/document\360\237\226\211/LICENSE.txt" "b/document\360\237\226\211/LICENSE.txt" new file mode 120000 index 0000000..4ab4373 --- /dev/null +++ "b/document\360\237\226\211/LICENSE.txt" @@ -0,0 +1 @@ +../LICENSE.txt \ No newline at end of file diff --git "a/document\360\237\226\211/README.txt" "b/document\360\237\226\211/README.txt" new file mode 120000 index 0000000..ecfa029 --- /dev/null +++ "b/document\360\237\226\211/README.txt" @@ -0,0 +1 @@ +../README.txt \ No newline at end of file diff --git a/release/Mosaic.jar b/release/Mosaic.jar index 18cae8758636de2dbb334de9d40fe5a3858eb143..f5b1a35a901785f2d860254f6b27de1bc05449b6 100644 GIT binary patch delta 11071 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 delta 9955 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