Age | Commit message (Collapse) | Author |
|
Specifically, for every @since tag with a date, I added another that
contains the correspending version. I did not add date @since tags to
comments that do not have them, as that would be too tedious for what
it's worth. These dates could still be found by using git bisect
though.
|
|
I used the Git history for years after 2019, and only included 2019 or
2018 if they were already there. I also added copyright notices to all
code files that don't already have them.
|
|
In some cases I've used @SuppressWarnings, which Gradle doesn't seem to
respect, but I've solved all the other ones.
|
|
Previously, these classes' equals() and hashCode() methods did not obey
the contracts:
For equals(), I considered two values equal even if there was a very
small deviation, in order to avoid floating-point error. This equals
relation is not transitive (i.e. it is possible that a = b && b = c but
a ≠ c), violating the contract of equals.
This also makes it impossible to properly implement hashCode, as if two
values are equal, they must have the same hash code. The solution I had
provided is an ineffective hack, which could mess with hash maps and
sets.
I have changed the implementation to demand exact equality. I have also
provided equalsApproximately() methods to both classes that use the old
behaviour. Hash codes are only really used for hash maps, and the old
implementation doesn't even achieve its purpose, so I did not add a
method to return the old hash behaviour.
|
|
|
|
Most of the internal problems with the expression parser happened
because I was accepting the arguments for binary operators in the wrong
order. For example, '2 - 1' became '1 2 -', not '2 1 -'.
The likely cause of this error is the following sequence of events:
- In commit 6dbd32cd, I created the code for interpreting RPN. I
accepted two arguments from the stack (o1 and o2), then performed o1
<op> o2. However, because stacks are in LIFO order, I should have
actually done o2 <op> o1.
- Later, in commit 94349688, I created the code for converting an infix
expression to RPN. Creating the expressions in the correct order did
not work, because my interpreter used the incorrect order. To 'fix'
this problem, I created the expressions in the incorrect order. I did
not notice any discrepancy, probably because I was not testing the
individual methods, only the two-step whole (which found no errors).
|
|
./gradlew javadoc
|
|
|
|
|
|
|
|
|
|
Previously, you could only exponentiate individual dimensions in
expressions. For example, `Length^3` was valid, but `(Length / Time)^2`
was not. This is now fixed.
|
|
|
|
|
|
Also fixed some bugs:
- Presenter now has default values for its settings in case they don't load properly
- UnitDatabase ensures its units, prefixes and dimensions have all of the names
you give it
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TabbedView now displays its units, but with their toString method which shows
their definition in addition to their name
|
|
|
|
Currently "supports" unit conversion, expression conversion and settings loading
|
|
|
|
|
|
Also fixed a bug where a prefixed unit map with units but no prefixes would
appear empty
|
|
|
|
|
|
|