@mojaloop/ml-number 11.2.7 → 11.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [11.3.0](https://github.com/mojaloop/ml-number/compare/v11.2.7...v11.3.0) (2025-07-15)
6
+
7
+
8
+ ### Features
9
+
10
+ * added isequal to function ([#40](https://github.com/mojaloop/ml-number/issues/40)) ([40c2a0d](https://github.com/mojaloop/ml-number/commit/40c2a0dc3958d25c942d6288359e7289e45db62e))
11
+
5
12
  ### [11.2.7](https://github.com/mojaloop/ml-number/compare/v11.2.6...v11.2.7) (2025-02-19)
6
13
 
7
14
  ### [11.2.6](https://github.com/mojaloop/ml-number/compare/v11.2.5...v11.2.6) (2025-01-24)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mojaloop/ml-number",
3
- "version": "11.2.7",
3
+ "version": "11.3.0",
4
4
  "description": "Mojaloop Number Library implementation that handles decimal processing of amounts/numbers",
5
5
  "author": "ModusBox",
6
6
  "contributors": [
@@ -46,13 +46,13 @@
46
46
  "registry": "https://registry.npmjs.org/"
47
47
  },
48
48
  "dependencies": {
49
- "bignumber.js": "9.1.2"
49
+ "bignumber.js": "9.3.1"
50
50
  },
51
51
  "devDependencies": {
52
52
  "audit-ci": "^7.1.0",
53
- "eslint": "9.20.1",
53
+ "eslint": "9.31.0",
54
54
  "faucet": "0.0.4",
55
- "npm-check-updates": "17.1.14",
55
+ "npm-check-updates": "18.0.1",
56
56
  "nyc": "17.1.0",
57
57
  "pre-commit": "1.2.2",
58
58
  "standard": "17.1.2",
package/src/mlnumber.js CHANGED
@@ -164,6 +164,24 @@ class MLNumber {
164
164
  toFixed (decimalPlaces = 4, roundingMode = BigNumber.ROUND_UP) {
165
165
  return this.mlNumber.toFixed(decimalPlaces, roundingMode)
166
166
  }
167
+
168
+ /**
169
+ * @function isEqualTo
170
+ *
171
+ * @description Checks if MLNumber is equal to another value
172
+ *
173
+ * @param {string|number|MLNumber} value - Value to compare
174
+ * @return {boolean} - Returns true if equal, false otherwise
175
+ */
176
+ isEqualTo (value) {
177
+ let compareValue
178
+ if (value instanceof MLNumber) {
179
+ compareValue = value.mlNumber
180
+ } else {
181
+ compareValue = new BigNumber(value)
182
+ }
183
+ return this.mlNumber.isEqualTo(compareValue)
184
+ }
167
185
  }
168
186
 
169
187
  module.exports = {
@@ -182,10 +182,44 @@ test('MLNumber', mlNumberTest => {
182
182
  test.end()
183
183
  })
184
184
 
185
- mlNumberTest.test('Create MLNumber with MLNumber variable', test => {
186
- const mlNumber = new MLNumber(9)
187
- const mlNumber2 = new MLNumber(mlNumber)
188
- test.deepEqual(mlNumber, mlNumber2, 'Ml number created from MLNumber are equal')
185
+ mlNumberTest.test('isEqualTo should compare MLNumber instances', test => {
186
+ const mlNumber1 = new MLNumber(10)
187
+ const mlNumber2 = new MLNumber(10)
188
+ const mlNumber3 = new MLNumber('10')
189
+ const mlNumber4 = new MLNumber(11)
190
+ test.ok(mlNumber1.isEqualTo(mlNumber2), 'MLNumber(10) is equal to MLNumber(10)')
191
+ test.ok(mlNumber1.isEqualTo(mlNumber3), 'MLNumber(10) is equal to MLNumber("10")')
192
+ test.notOk(mlNumber1.isEqualTo(mlNumber4), 'MLNumber(10) is not equal to MLNumber(11)')
193
+ test.end()
194
+ })
195
+
196
+ mlNumberTest.test('Native JS decimal math should show binary floating point issue', test => {
197
+ // This test demonstrates the classic JS decimal issue
198
+ test.notOk((0.1 + 0.2) === 0.3, 'Native JS (0.1 + 0.2) === 0.3 is false due to floating point error')
199
+ test.end()
200
+ })
201
+
202
+ mlNumberTest.test('MLNumber should handle decimal math correctly', test => {
203
+ // This test demonstrates MLNumber (BigNumber) correct handling
204
+ const mlNumber1 = new MLNumber(0.1)
205
+ const mlNumber2 = new MLNumber(0.2)
206
+ const mlNumber3 = new MLNumber(0.3)
207
+ const sum = mlNumber1.add(mlNumber2)
208
+ test.ok(sum.isEqualTo(mlNumber3), 'MLNumber(0.1) + MLNumber(0.2) is equal to MLNumber(0.3)')
209
+ test.end()
210
+ })
211
+
212
+ mlNumberTest.test('isEqualTo should convert non-MLNumber values to BigNumber for comparison', test => {
213
+ const mlNumber = new MLNumber('123.456')
214
+ // Compare with string
215
+ test.ok(mlNumber.isEqualTo('123.456'), 'MLNumber is equal to string value')
216
+ // Compare with number
217
+ test.ok(mlNumber.isEqualTo(123.456), 'MLNumber is equal to number value')
218
+ // Compare with BigNumber directly
219
+ const BigNumber = require('bignumber.js')
220
+ test.ok(mlNumber.isEqualTo(new BigNumber('123.456')), 'MLNumber is equal to BigNumber value')
221
+ // Compare with different value
222
+ test.notOk(mlNumber.isEqualTo('654.321'), 'MLNumber is not equal to different string value')
189
223
  test.end()
190
224
  })
191
225