mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-05-16 09:11:21 +00:00
Implement host API for big decimal equals (#476)
* Implement host api for big decimal equals * Add test cases for big decimal equals * Use boolean type conversion --------- Co-authored-by: neeraj <neeraj.rtly@gmail.com>
This commit is contained in:
parent
7c8f84b1dc
commit
e54f4c9276
@ -478,7 +478,23 @@ export const instantiate = async (
|
||||
|
||||
return powResultBigDecimal;
|
||||
},
|
||||
'bigDecimal.equals': async (x: number, y: number) => {
|
||||
// Create decimal x string.
|
||||
const xBigDecimal = await BigDecimal.wrap(x);
|
||||
const xStringPtr = await xBigDecimal.toString();
|
||||
const xDecimalString = __getString(xStringPtr);
|
||||
const xDecimal = new GraphDecimal(xDecimalString);
|
||||
|
||||
// Create decimal y string.
|
||||
const yBigDecimal = await BigDecimal.wrap(y);
|
||||
const yStringPtr = await yBigDecimal.toString();
|
||||
const yDecimalString = __getString(yStringPtr);
|
||||
|
||||
// Perform the decimal equal operation.
|
||||
const isEqual = xDecimal.equals(yDecimalString);
|
||||
|
||||
return isEqual;
|
||||
},
|
||||
'bigInt.fromString': async (s: number) => {
|
||||
const string = __getString(s);
|
||||
|
||||
|
@ -638,4 +638,22 @@ describe('numbers wasm tests', () => {
|
||||
expect(__getString(ptr)).to.equal(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe('should execute bigDecimal equals API', () => {
|
||||
let testBigDecimalEquals: any, __newString: any;
|
||||
|
||||
before(() => {
|
||||
({ testBigDecimalEquals, __newString } = exports);
|
||||
});
|
||||
|
||||
it('should check given bigDecimals are equal', async () => {
|
||||
const ptr = await testBigDecimalEquals(await __newString('231543212.2132354'), await __newString('231543212.2132354'));
|
||||
expect(Boolean(ptr)).to.equal(true);
|
||||
});
|
||||
|
||||
it('should check given bigDecimals are not equal', async () => {
|
||||
const ptr = await testBigDecimalEquals(await __newString('231543212.2132354'), await __newString('54652.65645'));
|
||||
expect(Boolean(ptr)).to.equal(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
||||
|
||||
import { Address, log, BigInt, BigDecimal, ByteArray, dataSource, ethereum, Bytes, crypto, json, JSONValueKind } from '@graphprotocol/graph-ts';
|
||||
import { Address, log, BigInt, BigDecimal, bigDecimal, ByteArray, dataSource, ethereum, Bytes, crypto, json, JSONValueKind } from '@graphprotocol/graph-ts';
|
||||
|
||||
import {
|
||||
Example1,
|
||||
@ -299,6 +299,15 @@ export function testBigDecimalTimes (value1: string, value2: string): string {
|
||||
return res.toString();
|
||||
}
|
||||
|
||||
export function testBigDecimalEquals (value1: string, value2: string): boolean {
|
||||
log.debug('In test bigDecimal.equals', []);
|
||||
|
||||
const bigDecimal1 = bigDecimal.fromString(value1);
|
||||
const bigDecimal2 = bigDecimal.fromString(value2);
|
||||
|
||||
return bigDecimal1.equals(bigDecimal2);
|
||||
}
|
||||
|
||||
export function testBigIntPlus (value1: string, value2: string): string {
|
||||
log.debug('In test bigInt.plus', []);
|
||||
|
||||
|
@ -151,6 +151,13 @@ export class GraphDecimal {
|
||||
return this.value.cmp(param);
|
||||
}
|
||||
|
||||
equals (n: Decimal.Value | GraphDecimal): boolean {
|
||||
this._checkOutOfRange(this);
|
||||
const param = this._checkOutOfRange(n);
|
||||
|
||||
return this.value.equals(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to check and throw an error if a given value has exponent out of the specified range (MIN_EXP to MAX_EXP).
|
||||
* @param n A Decimal value to check the range for.
|
||||
|
Loading…
Reference in New Issue
Block a user