@@ -105,3 +105,75 @@ TEST(TEST_WEB3, test_decode_txreceipt)
105105 ASSERT_EQ (receipt.blockNumber , 0x8d1447 );
106106}
107107
108+ void helper_eth_convert (uint64_t value, const char *compare, enum ETH_UNIT from, enum ETH_UNIT to)
109+ {
110+ int rc;
111+ uint256_t amount;
112+ const size_t buf_len = 50 ;
113+ char buf[buf_len] = {0 };
114+ set256_uint64 (&amount, value);
115+ rc = eth_convert (&amount, from, to, buf, buf_len);
116+ ASSERT_EQ (rc, 0 );
117+ ASSERT_EQ (strcmp (buf, compare), 0 );
118+ ASSERT_EQ (strlen (buf), strlen (compare));
119+ }
120+
121+ TEST (TEST_ETH_CONVERT, test_eth_convert)
122+ {
123+ int rc;
124+ uint256_t amount;
125+ const size_t buf_len = 50 ;
126+ char buf[buf_len] = {0 };
127+
128+ set256_uint64 (&amount, 1234 );
129+
130+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_FINNEY, buf, 3 );
131+ ASSERT_EQ (rc, -1 );
132+
133+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_ETHER, buf, 4 );
134+ ASSERT_EQ (rc, 0 );
135+ ASSERT_EQ (strcmp (buf, " 1234" ), 0 );
136+
137+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_FINNEY, buf, 6 );
138+ ASSERT_EQ (rc, -1 );
139+
140+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_FINNEY, buf, 7 );
141+ ASSERT_EQ (rc, 0 );
142+ ASSERT_EQ (strcmp (buf, " 1234000" ), 0 );
143+
144+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_KETHER, buf, 4 );
145+ ASSERT_EQ (rc, -1 );
146+
147+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_KETHER, buf, 5 );
148+ ASSERT_EQ (rc, 0 );
149+ ASSERT_EQ (strcmp (buf, " 1.234" ), 0 );
150+
151+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_METHER, buf, 7 );
152+ ASSERT_EQ (rc, -1 );
153+
154+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_METHER, buf, 8 );
155+ ASSERT_EQ (rc, 0 );
156+ ASSERT_EQ (strcmp (buf, " 0.001234" ), 0 );
157+
158+ helper_eth_convert (1 ," 1000000000000000000" , ETH_UNIT_ETHER, ETH_UNIT_WEI);
159+ helper_eth_convert (1 ," 1000000000000000" , ETH_UNIT_ETHER, ETH_UNIT_KWEI);
160+ helper_eth_convert (1 ," 1000000000000" , ETH_UNIT_ETHER, ETH_UNIT_MWEI);
161+ helper_eth_convert (1 ," 1000000000" , ETH_UNIT_ETHER, ETH_UNIT_GWEI);
162+ helper_eth_convert (1 ," 1000000" , ETH_UNIT_ETHER, ETH_UNIT_SZABO);
163+ helper_eth_convert (1 ," 1000" , ETH_UNIT_ETHER, ETH_UNIT_FINNEY);
164+ helper_eth_convert (1 ," 1" , ETH_UNIT_ETHER, ETH_UNIT_ETHER);
165+ helper_eth_convert (1 ," 0.001" , ETH_UNIT_ETHER, ETH_UNIT_KETHER);
166+ helper_eth_convert (1 ," 0.000001" , ETH_UNIT_ETHER, ETH_UNIT_METHER);
167+ helper_eth_convert (1 ," 0.000000001" , ETH_UNIT_ETHER, ETH_UNIT_GETHER);
168+ helper_eth_convert (1 ," 0.000000000001" , ETH_UNIT_ETHER, ETH_UNIT_TETHER);
169+
170+ set256_uint64 (&amount, 0 );
171+ rc = eth_convert (&amount, ETH_UNIT_ETHER, ETH_UNIT_WEI, buf, buf_len);
172+ ASSERT_EQ (rc, 0 );
173+ ASSERT_EQ (strcmp (buf, " 0" ), 0 );
174+
175+ helper_eth_convert (123 ," 0.123" , ETH_UNIT_ETHER, ETH_UNIT_KETHER);
176+ helper_eth_convert (1234 ," 1.234" , ETH_UNIT_ETHER, ETH_UNIT_KETHER);
177+ helper_eth_convert (12345 ," 12.345" , ETH_UNIT_ETHER, ETH_UNIT_KETHER);
178+ helper_eth_convert (123456 ," 123.456" , ETH_UNIT_ETHER, ETH_UNIT_KETHER);
179+ }
0 commit comments