Skip to content

Commit 9b04278

Browse files
Fix DecimalNormalizer.NormalizeToString so it doesn't end with a '.' character. (#307)
1 parent 7aebf12 commit 9b04278

File tree

4 files changed

+225
-1
lines changed

4 files changed

+225
-1
lines changed
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using System.Numerics;
4+
using NUnit.Framework;
5+
using UnityEngine;
6+
using UnityEngine.TestTools;
7+
using Sequence.Utils;
8+
9+
public class DecimalNormalizerTests
10+
{
11+
[Test]
12+
public void Normalize_WithDefaultDecimals_ReturnsCorrectString()
13+
{
14+
string result = DecimalNormalizer.Normalize(1.5f);
15+
Assert.AreEqual("1500000000000000000", result);
16+
}
17+
18+
[Test]
19+
public void Normalize_WithCustomDecimals_ReturnsCorrectString()
20+
{
21+
string result = DecimalNormalizer.Normalize(1.5f, 6);
22+
Assert.AreEqual("1500000", result);
23+
}
24+
25+
[Test]
26+
public void Normalize_WithZero_ReturnsZero()
27+
{
28+
string result = DecimalNormalizer.Normalize(0f);
29+
Assert.AreEqual("0", result);
30+
}
31+
32+
[Test]
33+
public void Normalize_WithNegativeNumber_ReturnsPositiveResult()
34+
{
35+
string result = DecimalNormalizer.Normalize(-1.5f, 6);
36+
Assert.AreEqual("1500000", result);
37+
}
38+
39+
[Test]
40+
public void NormalizeAsBigInteger_WithDefaultDecimals_ReturnsCorrectBigInteger()
41+
{
42+
BigInteger result = DecimalNormalizer.NormalizeAsBigInteger(1.5f);
43+
BigInteger expected = new BigInteger(1500000000000000000);
44+
Assert.AreEqual(expected, result);
45+
}
46+
47+
[Test]
48+
public void NormalizeAsBigInteger_WithCustomDecimals_ReturnsCorrectBigInteger()
49+
{
50+
BigInteger result = DecimalNormalizer.NormalizeAsBigInteger(2.75f, 4);
51+
BigInteger expected = new BigInteger(27500);
52+
Assert.AreEqual(expected, result);
53+
}
54+
55+
[Test]
56+
public void NormalizeAsBigInteger_WithSmallNumber_ReturnsCorrectBigInteger()
57+
{
58+
BigInteger result = DecimalNormalizer.NormalizeAsBigInteger(0.001f, 6);
59+
BigInteger expected = new BigInteger(1000);
60+
Assert.AreEqual(expected, result);
61+
}
62+
63+
[Test]
64+
public void ReturnToNormalString_WithWholeNumber_ReturnsCorrectString()
65+
{
66+
BigInteger input = new BigInteger(1500000000000000000);
67+
string result = DecimalNormalizer.ReturnToNormalString(input, 18);
68+
Assert.AreEqual("1.5", result);
69+
}
70+
71+
[Test]
72+
public void ReturnToNormalString_WithCustomDecimals_ReturnsCorrectString()
73+
{
74+
BigInteger input = new BigInteger(1500000);
75+
string result = DecimalNormalizer.ReturnToNormalString(input, 6);
76+
Assert.AreEqual("1.5", result);
77+
}
78+
79+
[Test]
80+
public void ReturnToNormalString_WithSmallNumber_ReturnsCorrectString()
81+
{
82+
BigInteger input = new BigInteger(1000);
83+
string result = DecimalNormalizer.ReturnToNormalString(input, 6);
84+
Assert.AreEqual("0.001", result);
85+
}
86+
87+
[Test]
88+
public void ReturnToNormalString_WithZero_ReturnsZero()
89+
{
90+
BigInteger input = new BigInteger(0);
91+
string result = DecimalNormalizer.ReturnToNormalString(input, 18);
92+
Assert.AreEqual("0", result);
93+
}
94+
95+
[Test]
96+
public void ReturnToNormalString_WithNegativeNumber_ReturnsPositiveResult()
97+
{
98+
BigInteger input = new BigInteger(-1500000000000000000);
99+
string result = DecimalNormalizer.ReturnToNormalString(input, 18);
100+
Assert.AreEqual("1.5", result);
101+
}
102+
103+
[Test]
104+
public void ReturnToNormalString_WithTrailingZeros_TrimsZeros()
105+
{
106+
BigInteger input = new BigInteger(1500000000000000000);
107+
string result = DecimalNormalizer.ReturnToNormalString(input, 18);
108+
Assert.AreEqual("1.5", result);
109+
}
110+
111+
[Test]
112+
public void ReturnToNormal_WithBigInteger_ReturnsCorrectFloat()
113+
{
114+
BigInteger input = new BigInteger(1500000000000000000);
115+
float result = DecimalNormalizer.ReturnToNormal(input, 18);
116+
Assert.AreEqual(1.5f, result, 0.0001f);
117+
}
118+
119+
[Test]
120+
public void ReturnToNormal_WithCustomDecimals_ReturnsCorrectFloat()
121+
{
122+
BigInteger input = new BigInteger(2750000);
123+
float result = DecimalNormalizer.ReturnToNormal(input, 6);
124+
Assert.AreEqual(2.75f, result, 0.0001f);
125+
}
126+
127+
[Test]
128+
public void ReturnToNormalPrecise_WithBigInteger_ReturnsCorrectDecimal()
129+
{
130+
BigInteger input = new BigInteger(1500000000000000000);
131+
decimal result = DecimalNormalizer.ReturnToNormalPrecise(input, 18);
132+
Assert.AreEqual(1.5m, result);
133+
}
134+
135+
[Test]
136+
public void ReturnToNormalPrecise_WithCustomDecimals_ReturnsCorrectDecimal()
137+
{
138+
BigInteger input = new BigInteger(3250000);
139+
decimal result = DecimalNormalizer.ReturnToNormalPrecise(input, 6);
140+
Assert.AreEqual(3.25m, result);
141+
}
142+
143+
[Test]
144+
public void RoundTrip_NormalizeAndReturnToNormal_PreservesValue()
145+
{
146+
float originalValue = 12.34f;
147+
int decimals = 6;
148+
149+
BigInteger normalized = DecimalNormalizer.NormalizeAsBigInteger(originalValue, decimals);
150+
float returned = DecimalNormalizer.ReturnToNormal(normalized, decimals);
151+
152+
Assert.AreEqual(originalValue, returned, 0.0001f);
153+
}
154+
155+
[Test]
156+
public void EdgeCase_VerySmallNumber_HandlesCorrectly()
157+
{
158+
float verySmall = 0.000001f;
159+
int decimals = 18;
160+
161+
string normalized = DecimalNormalizer.Normalize(verySmall, decimals);
162+
BigInteger bigInt = BigInteger.Parse(normalized);
163+
float returned = DecimalNormalizer.ReturnToNormal(bigInt, decimals);
164+
165+
Assert.AreEqual(verySmall, returned, 0.0000001f);
166+
}
167+
168+
[Test]
169+
public void EdgeCase_LargeNumber_HandlesCorrectly()
170+
{
171+
float largeNumber = 9999.99f;
172+
int decimals = 6;
173+
174+
BigInteger normalized = DecimalNormalizer.NormalizeAsBigInteger(largeNumber, decimals);
175+
float returned = DecimalNormalizer.ReturnToNormal(normalized, decimals);
176+
177+
Assert.AreEqual(largeNumber, returned, 0.01f);
178+
}
179+
180+
[Test]
181+
public void BugReproTest_String()
182+
{
183+
BigInteger input = BigInteger.Parse("10000000000000000000000000");
184+
185+
string result = DecimalNormalizer.ReturnToNormalString(input, 18);
186+
187+
Assert.AreEqual("10000000", result);
188+
}
189+
190+
[Test]
191+
public void BugReproTest_Float()
192+
{
193+
BigInteger input = BigInteger.Parse("10000000000000000000000000");
194+
195+
float result = DecimalNormalizer.ReturnToNormal(input, 18);
196+
197+
Assert.AreEqual(10000000f, result);
198+
}
199+
200+
[Test]
201+
public void BugReproTest_Decimal()
202+
{
203+
BigInteger input = BigInteger.Parse("10000000000000000000000000");
204+
205+
decimal result = DecimalNormalizer.ReturnToNormalPrecise(input, 18);
206+
207+
Assert.AreEqual(decimal.Parse("10000000"), result);
208+
}
209+
}

Assets/SequenceSDK/Utils/Tests/DecimalNormalizerTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/DecimalNormalizer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ public static string ReturnToNormalString(BigInteger x, int decimals = 18)
3535
{
3636
resultStr = resultStr.TrimEnd('0');
3737
}
38+
if (resultStr.EndsWith("."))
39+
{
40+
resultStr = resultStr.TrimEnd('.');
41+
}
3842
return resultStr;
3943
}
4044

Packages/Sequence-Unity/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "xyz.0xsequence.waas-unity",
3-
"version": "4.2.2",
3+
"version": "4.2.3",
44
"displayName": "Sequence Embedded Wallet SDK",
55
"description": "A Unity SDK for Sequence APIs",
66
"unity": "2021.3",

0 commit comments

Comments
 (0)