diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..c9fbf592 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ + + + +.PHONY: act +act: + act --job build diff --git a/README.adoc b/README.adoc index af1e0000..08fc6efe 100644 --- a/README.adoc +++ b/README.adoc @@ -435,12 +435,9 @@ Like this it can be consulted .Accessing configuration [source,java] ---- -import static org.meeuw.configuration.*; -import static org.meeuw.math.text.spi.FormatService.*; - - Configuration configuration = ConfigurationService.getConfiguration(); - NumberConfiguration aspect = configuration.getAspect(NumberConfiguration.class); - int minimalExponent = aspect.getMinimalExponent(); +include::mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java[tag=import] +... +include::mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java[tag=access, indent=0] ---- This would however probably mainly be used in _implementations_. @@ -452,12 +449,7 @@ Actual configuration can be done in two basically distinct ways. .temporary overrides [source,java] ---- -Configuration configuration = ConfigurationService.getConfiguration(); -ConfiguraationService.setConfiguration(configuration.toBuilder().aspect(NumberConfiguration.class, (nc) -> nc.withMinimalExponent(8)).build()); - -... code ... - -ConfigurationService.resetToDefaults(); +include::mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java[tag=configurationService,indent=-] ---- There are some utilities in `ConfigurationService` that makes this process a bit easier. diff --git a/TODO.adoc b/TODO.adoc new file mode 100644 index 00000000..f4180eae --- /dev/null +++ b/TODO.adoc @@ -0,0 +1,3 @@ += todo + +- diff --git a/mihxil-configuration/src/main/java/org/meeuw/configuration/ConfigurationService.java b/mihxil-configuration/src/main/java/org/meeuw/configuration/ConfigurationService.java index 9c3d148b..b72b8f67 100644 --- a/mihxil-configuration/src/main/java/org/meeuw/configuration/ConfigurationService.java +++ b/mihxil-configuration/src/main/java/org/meeuw/configuration/ConfigurationService.java @@ -91,6 +91,29 @@ public static void setConfiguration(Configuration configuration) { CONFIGURATION.set(configuration); } + /** + * @since 0.10 + */ + public static void setConfiguration(Configuration configuration, Consumer consumer) { + Configuration.Builder builder = configuration.toBuilder(); + consumer.accept(builder); + setConfiguration(builder); + } + /** + * @since 0.10 + */ + public static void setConfiguration(Consumer consumer) { + setConfiguration(getConfiguration(), consumer); + } + + /** + * + * @since 0.10 + */ + public static void setConfiguration(Configuration.Builder configuration) { + setConfiguration(configuration.build()); + } + /** * Unsets the configuration thread local, effectively resetting it the default settings. */ diff --git a/mihxil-configuration/src/test/java/org/meeuw/test/configuration/ConfigurationServiceTest.java b/mihxil-configuration/src/test/java/org/meeuw/test/configuration/ConfigurationServiceTest.java index 7a6411d8..edf4b84f 100644 --- a/mihxil-configuration/src/test/java/org/meeuw/test/configuration/ConfigurationServiceTest.java +++ b/mihxil-configuration/src/test/java/org/meeuw/test/configuration/ConfigurationServiceTest.java @@ -64,9 +64,8 @@ public void getAndSetConfiguration() { TestConfigurationAspect aspect = configuration.getAspect(TestConfigurationAspect.class); int someInt = aspect.getSomeInt(); log.info(() -> String.format("some int: %d", someInt)); - ConfigurationService.setConfiguration(configuration.toBuilder() - .configure(TestConfigurationAspect.class, (nc) -> nc.withSomeInt(8)) - .build() + ConfigurationService.setConfiguration(builder -> + builder.configure(TestConfigurationAspect.class, (nc) -> nc.withSomeInt(8)) ); assertThat(getConfiguration() .getAspectValue(TestConfigurationAspect.class, TestConfigurationAspect::getSomeInt) diff --git a/mihxil-math-theories/src/main/java/org/meeuw/math/abstractalgebra/test/MetricSpaceTheory.java b/mihxil-math-theories/src/main/java/org/meeuw/math/abstractalgebra/test/MetricSpaceTheory.java index 000dc830..5b45c43a 100644 --- a/mihxil-math-theories/src/main/java/org/meeuw/math/abstractalgebra/test/MetricSpaceTheory.java +++ b/mihxil-math-theories/src/main/java/org/meeuw/math/abstractalgebra/test/MetricSpaceTheory.java @@ -48,7 +48,7 @@ default void distancePositive(@ForAll(ELEMENTS) E a, @ForAll(ELEMENTS) E b) { } @Property - default void identifyOfIndiscernibles(@ForAll(ELEMENTS) E a) { + default void identityOfIndiscernibles(@ForAll(ELEMENTS) E a) { assertThat(a.distanceTo(a).isZero()).isTrue(); } diff --git a/mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java b/mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java new file mode 100644 index 00000000..b9739f54 --- /dev/null +++ b/mihxil-math/src/test/java/org/meeuw/test/examples/ConfigurationExample.java @@ -0,0 +1,31 @@ +package org.meeuw.test.examples; +// tag::import[] + +import org.meeuw.configuration.Configuration; +import org.meeuw.configuration.ConfigurationService; +import org.meeuw.math.text.configuration.NumberConfiguration; +// end::import[] +public class ConfigurationExample { + + public static void access() { + // tag::access[] + + Configuration configuration = ConfigurationService.getConfiguration(); + NumberConfiguration aspect = configuration.getAspect(NumberConfiguration.class); + int minimalExponent = aspect.getMinimalExponent(); + // end::access[] + } + + public static void setConfiguration(String[] argv) { + // tag::configurationService[] + ConfigurationService.setConfiguration(builder -> + builder.configure(NumberConfiguration.class, + (numberConfiguration) -> numberConfiguration.withMinimalExponent(8) + ) + ); + + //...code... + ConfigurationService.resetToDefaults(); + // end::configurationService[] + } +} diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/PhysicalNumber.java b/mihxil-physics/src/main/java/org/meeuw/physics/PhysicalNumber.java index 1296c557..54b8066b 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/PhysicalNumber.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/PhysicalNumber.java @@ -179,6 +179,9 @@ public PhysicalNumber toUnits(Unit... units) { return toUnits(Units.of(units)); } + /** + * Converts the current physical number to a different {@link SystemOfMeasurements}. + */ public PhysicalNumber toUnits(SystemOfMeasurements systemOfMeasurements) { return toUnits(systemOfMeasurements.forDimensions(units.getDimensions())); } diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/Prefix.java b/mihxil-physics/src/main/java/org/meeuw/physics/Prefix.java index b4cf8442..fbea76b2 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/Prefix.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/Prefix.java @@ -21,7 +21,7 @@ import java.util.function.Supplier; /** - * Multiplication prefix that can be used on a {@link Unit}, to get a new {@code code} that differs a certain factor only, but has the same {@link DimensionalAnalysis} + * Multiplication prefix that can be used on a {@link Unit}, to get a new {@code Unit} that differs a certain factor only, but has the same {@link DimensionalAnalysis} * * @author Michiel Meeuwissen * @since 0.4 diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/PrefixedUnit.java b/mihxil-physics/src/main/java/org/meeuw/physics/PrefixedUnit.java index f5d698e2..ff0beb87 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/PrefixedUnit.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/PrefixedUnit.java @@ -22,6 +22,9 @@ import org.meeuw.math.uncertainnumbers.field.UncertainReal; +/** + * A unit wrapping another {@link Unit} with a {@link Prefix}, and it just a multiple of that unit. + */ public class PrefixedUnit implements Unit { private final Unit wrapped; diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/SystemOfMeasurements.java b/mihxil-physics/src/main/java/org/meeuw/physics/SystemOfMeasurements.java index 7318a8c3..00e2d36d 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/SystemOfMeasurements.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/SystemOfMeasurements.java @@ -23,6 +23,9 @@ import org.meeuw.math.uncertainnumbers.field.UncertainRealField; /** + * There are different 'systems of measurements' in use. E.g. {@link SI} and {@link Planck}. + *

+ * * @author Michiel Meeuwissen * @since 0.6 */ @@ -32,7 +35,8 @@ public interface SystemOfMeasurements { Unit forDimension(Dimension dimension); /** - * Returns in this system of measurements the preferred units for the given dimensional analysis + * Returns in this system of measurements the preferred units for the given dimensional analysis. This may not + * always be unique. */ @NonNull default Units forDimensions(DimensionalAnalysis dimensionalAnalysis) { @@ -44,6 +48,14 @@ default Units forDimensions(DimensionalAnalysis dimensionalAnalysis) { .reduce(UncertainRealField.INSTANCE.one(), UncertainReal::times); return new CompositeUnits(siFactor, unitExponents); } + default Units forQuantity(Quantity quantity) { + for (Units unit : getUnits()) { + if (unit.getQuantities().contains(quantity)) { + return unit; + } + } + return forDimensions(quantity.getDimensionalAnalysis()); + } default List getBaseUnits() { @@ -58,14 +70,7 @@ default List getUnits() { return Collections.unmodifiableList(result); } - default Units forQuantity(Quantity quantity) { - for (Units unit : getUnits()) { - if (unit.getQuantities().contains(quantity)) { - return unit; - } - } - return forDimensions(quantity.getDimensionalAnalysis()); - } + default Units forDimensions(DimensionExponent... dimensions) { return forDimensions(DimensionalAnalysis.of(dimensions)); diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/Units.java b/mihxil-physics/src/main/java/org/meeuw/physics/Units.java index b893e279..6cea359b 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/Units.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/Units.java @@ -35,6 +35,9 @@ public interface Units extends Units DIMENSIONLESS = of(exactly(1)); + /** + * The physical units form a {@link org.meeuw.math.abstractalgebra.MultiplicativeGroup}, implemented by {@link UnitsGroup}. + */ @Override default UnitsGroup getStructure() { return UnitsGroup.INSTANCE; diff --git a/mihxil-physics/src/main/java/org/meeuw/physics/UnitsGroup.java b/mihxil-physics/src/main/java/org/meeuw/physics/UnitsGroup.java index 02c262bc..372352bb 100644 --- a/mihxil-physics/src/main/java/org/meeuw/physics/UnitsGroup.java +++ b/mihxil-physics/src/main/java/org/meeuw/physics/UnitsGroup.java @@ -24,6 +24,9 @@ import static org.meeuw.math.uncertainnumbers.field.UncertainDoubleElement.exactly; /** + * The {@link MultiplicativeAbelianGroup} of {@link Units}. + *

+ * * @author Michiel Meeuwissen * @since 0.4 */ @@ -70,8 +73,9 @@ public Stream stream() { @Override public Units nextRandom(Random random) { UnitExponent[] units = new UnitExponent[SIUnit.values().length]; + for (int i = 0; i < units.length; i++) { - units[i] = new UnitExponent(SIUnit.values()[i], random.nextInt(20)); + units[i] = new UnitExponent(SIUnit.values()[i], (int) (random.nextGaussian() * 3)); } return new CompositeUnits(exactly(1), units); diff --git a/mihxil-physics/src/test/java/org/meeuw/physics/PlanckTest.java b/mihxil-physics/src/test/java/org/meeuw/physics/PlanckTest.java index 643b46ea..e76ef7c3 100644 --- a/mihxil-physics/src/test/java/org/meeuw/physics/PlanckTest.java +++ b/mihxil-physics/src/test/java/org/meeuw/physics/PlanckTest.java @@ -31,13 +31,11 @@ public void c() { assertThat(cSI.toString()).isEqualTo("(2.99792 ± 0.00005)·10⁸ m·s⁻¹"); assertThat(cSI.toUnits(Planck.INSTANCE).toString()).isEqualTo("1.00000 ± 0.00002 ℓₚ·tₚ⁻¹"); - } @Test - public void kB() { + public void BoltzmannConstant() { assertThat(Planck.kB.toString()).isEqualTo("1 ℓₚ·tₚ⁻¹"); - } }