Releases: soulverteam/SoulverCore
2.2.2
Minor change to the percentage evaluation logic
"100% + 0.5 = 150%" (previously the result was a decimal, "1.5").
Additional rounding functions
- "37 to nearest 10", "349 rounded to nearest hundred"
Additional units
- bars, millibars, and decimeter (+ square/cubic decimeters)
Bug fixes
- Fixed an issue where certain Korean characters were being misinterpreted
In this release, SI notational symbols (other than k, M, G & T) have been removed as they were less obvious than scientific notation in most cases
Built with Xcode 14 & Swift 5.7
2.2.1
This is a version of SoulverCore 2.2 built with Xcode 13 & Swift 5.6
SoulverCore 2.2 added sophisticated string parsing features. They're a bit like Regex, but wayyyyyy cooler, and more human friendly 🐶.
Check out the dedicated repository to learn more
2.2.0
This version adds sophisticated string parsing & data point extraction features to SoulverCore. A bit like Regex, but wayyyyyy cooler, and human friendly 🐶.
Check out the dedicated repository on the topic to learn more
This build of SoulverCore was created with Xcode 14, and Swift 5.7.
Please continue to use SoulverCore 2.1.1 if you're still on Xcode 13.
2.1.1
2.1.0
Perfomance
- This release improves average calculation performance by 4x over SoulverCore 1, thanks to meticulous work optimizing four of the most perfomance-critical parts of the expression processing pipeline.
- Another factor contributing to this dramatic increase in performance was compiling the framework using Swift's "Optimize for Speed" compiler flag (in previous builds we used "Optimize for Size"). The trade-off is an overall increase to SoulverCore's file size of 2MB (or 500 KB zipped).
Benchmarks
- M3 Max (MacBook Pro): 11,627 calculations / second
- M2 (MacBook Air): 7,751 calculations / second
- M1 Max (MacBook Pro): 7,194 calculations / second
- M1 Pro (MacBook Pro): 6,944 calculations / second
- 2.4 GHz i9 (MacBook Pro): 3,636 calculations / second
- 3.6 GHz i3 (Mac Mini): 2,976 calculations / second
2.0.3
Calendar Calculations
- Unix timestamps for the current moment now include today's date
- Support for datestamps with the form "4th of July", "The 4th of July", and "July the 4th"
Bug fixes
- Fixed an issue where SoulverCore could throw a fatal error if a client's bundle was moved to a different location after being launched. This was due to a prerequisite resource file being missing when requested from the Bundle. All required resources are now eagerly loaded into memory when a Calculator or LineCollection is created (and they only use < 0.5mb of memory).
2.0.2
2.0.1
Dates
- Date results that are in the current year will now show the year stamp depending on whether all dates in the expression are from the current year or not (i.e June '17 + 2 weeks = 1 July', but '29 December 2021 + 3 weeks = 19 January 2022')
- Stricter logic for when slash formatted dates are recognized as dates rather than divisions
- Dot formatted dates are never recognized in locales where dot is used as a decimal point
Units
- Support for "oz" as both a unit of mass or volume (fl oz) depending on the expression context
Word Functions
- Added a 'divided by' phrase
2.0.0
New CurrencyRateProvider protocol (breaking change)
- There is a new
currencyRateProvider
property on an EngineCustomization - A currency rate provider returns rates on demand. This is an improvement from SoulverCore 1.x, where rates were set on an
EngineCustomization
object directly. This meant you had to recreate yourLineCollection
orCalculator
objects with a newEngineCustomization
whenever the rates changed - The
CurrencyList
class is no longer available. If you used it to fetch rates from Nomics and/or CurrencyLayer, you will need to fetch those rates yourself and provide them to SoulverCore via an object that conforms to CurrencyRateProvider
New scientific units
- Force (newtons, poundals, & pounds of force)
- Accelleration (m/s^2, ft/s^2)
- Torque (newton meters, pound feet, pound inches)
- Pressure (pascals, atmospheres, bars, pounds per square inch)
- Angular velocity (radians/s, revolutions/s, revolutions/min)
- Angles (arc second and arc minute)
- Substance (moles, molar)
- Electrical units (electric conductance, inductance, capacitance, magnetic flux and flux density)
- Fuel consumption (liters/km, liters/100 km) & fuel economy (miles/gallon, km/liter)
Statistics of lists of numbers
total/sum of 9, 12, 4, 2, 8 (= 35)
average of 5, 6 and 20 (= 10.33)
median of 9, 3, 4, 12 = (6.5)
Inflation
what is $500 today worth in 1997 (= $285.44)
what is $285.44 from 1997 worth today (= $500.0)
$1 from 1997 is worth what today (= $1.75)
Inflation predicting
what will $500 be worth in 2024 given 5% inflation (= $453.51)
value of $500 in 2024 assuming 5% inflation (= $453.51)
purchasing power of $500 in 2024 at 5% inflation (= $453.51)
New conditional syntaxes
a = 5 if b > 4 else 3
a = if b > 4 then 5 else 3
x = 900 unless y = 30
Bitwise operators
0b1100 | 0b1110 (= 0b1110)
0b0101 & 0b1010 (= 0b0)
0b1010 xor 0b1011 (= 0b1)
0b100 << 1 (= 0b1000)
0b100 >> 2 (= 0b1)
Sales Tax/GSTVAT calculations
sales tax in $50
$129 - VAT
To use this feature, set a variable on your VariableList
whose definition is SalesTax EvaluationResult
:
var variable = Variable(name: "sales tax", value: nil)
variable.definition = EvaluationResult.salesTax(SalesTax(decimalValue: 0.15))
Screen Density
- ppi of 15" screen at 1024x768 (= 85.33 PPI)
Cars & Tyres
- speed of 12 inch tyre at 522 rpm = (18.63 mph)
Bug fixes
- Numerous minor bug fixes
1.4.5
- Support for boolean and (&&), or (||) and not (!) operators
- Support for converting units of frequency into pitch
- Added ability to convert frequency to wavelength (and vice versa)
- Misc improvements to how rates are handled in certain cases
- Fixed an issue with the asinh function not returning an answer with certain values