| 18 | } |
| 19 | |
| 20 | let verifyDecimal = function (low, mid, high, negative, scale) { |
| 21 | let flags = negative ? ((scale << 16) | 0x80000000) : (scale << 16) |
| 22 | |
| 23 | let buffer = new Uint8Array(16) |
| 24 | writeUInt32(buffer, 0, low) |
| 25 | writeUInt32(buffer, 4, mid) |
| 26 | writeUInt32(buffer, 8, high) |
| 27 | writeUInt32(buffer, 12, flags) |
| 28 | |
| 29 | let readBuffer = new fbe.ReadBuffer() |
| 30 | readBuffer.attachBuffer(buffer) |
| 31 | |
| 32 | let model = new fbe.FieldModelDecimal(readBuffer, 0) |
| 33 | let value1 = model.get() |
| 34 | model.set(value1) |
| 35 | let value2 = model.get() |
| 36 | |
| 37 | if (!value1.eq(value2)) { |
| 38 | throw new Error('Invalid decimal serialization!') |
| 39 | } |
| 40 | |
| 41 | let finalModel = new fbe.FinalModelDecimal(readBuffer, 0) |
| 42 | let value3 = finalModel.get() |
| 43 | model.set(value3.value) |
| 44 | let value4 = finalModel.get() |
| 45 | |
| 46 | if ((!value1.eq(value3.value)) || (!value2.eq(value4.value)) || (value3.size !== 16) || (value4.size !== 16)) { |
| 47 | throw new Error('Invalid decimal final serialization!') |
| 48 | } |
| 49 | |
| 50 | return value1 |
| 51 | } |
| 52 | |
| 53 | test('Decimal tests', function (t) { |
| 54 | // FBE decimal exponent ranging from 0 to 28 |