@@ -1275,36 +1275,40 @@ func TestCmp(t *testing.T) {
12751275 }
12761276}
12771277
1278- func TestEqual (t * testing.T ) {
1278+ func TestComparisionUtils (t * testing.T ) {
12791279 testcases := []struct {
1280- a , b string
1281- want bool
1280+ a , b string
1281+ wantEqual bool
1282+ wantLT bool
1283+ wantLTE bool
1284+ wantGT bool
1285+ wantGTE bool
12821286 }{
1283- {"1234567890123456789" , "0" , false },
1284- {"123.123" , "-123.123" , false },
1285- {"-123.123" , "123.123" , false },
1286- {"-123.123" , "-123.123" , true },
1287- {"-123.123" , "-123.1234567890123456789" , false },
1288- {"123.123" , "123.1234567890123456789" , false },
1289- {"123.123" , "123.1230000000000000001" , false },
1290- {"-123.123" , "-123.1230000000000000001" , false },
1291- {"123.1230000000000000002" , "123.1230000000000000001" , false },
1292- {"-123.1230000000000000002" , "-123.1230000000000000001" , false },
1293- {"123.1230000000000000002" , "123.123000000001" , false },
1294- {"-123.1230000000000000002" , "-123.123000000001" , false },
1295- {"123.123" , "123.1230000" , true },
1296- {"123.101" , "123.1001" , false },
1297- {"1000000000000000000000000.1234567890123456789" , "1.1234567890123456789" , false },
1298- {"-1000000000000000000000000.1234567890123456789" , "1.1234567890123456789" , false },
1299- {"-1000000000000000000000000.1234567890123456789" , "-1.1234567890123456789" , false },
1300- {"1000000000000000000000000.1234567890123456789" , "1000000000000000000000000.1234567890123456789" , true },
1301- {"-1000000000000000000000000.1234567890123456789" , "-1000000000000000000000000.1234567890123456789" , true },
1302- {"1000000000000000000000000.1234567890123456789" , "1000000000000000000000000.1234567890123456788" , false },
1303- {"-1000000000000000000000000.1234567890123456789" , "-1000000000000000000000000.1234567890123456788" , false },
1304- {"1000000000000000000000000.12345678901234" , "1000000000000000000000000.1234567890123456788" , false },
1305- {"-1000000000000000000000000.12345678901234" , "-1000000000000000000000000.1234567890123456788" , false },
1306- {"1000000000000000000000000.1234567890123456788" , "1000000000000000000000000.12345678901234" , false },
1307- {"-1000000000000000000000000.1234567890123456788" , "-1000000000000000000000000.12345678901234" , false },
1287+ {"1234567890123456789" , "0" , false , false , false , true , true },
1288+ {"123.123" , "-123.123" , false , false , false , true , true },
1289+ {"-123.123" , "123.123" , false , true , true , false , false },
1290+ {"-123.123" , "-123.123" , true , false , true , false , true },
1291+ {"-123.123" , "-123.1234567890123456789" , false , false , false , true , true },
1292+ {"123.123" , "123.1234567890123456789" , false , true , true , false , false },
1293+ {"123.123" , "123.1230000000000000001" , false , true , true , false , false },
1294+ {"-123.123" , "-123.1230000000000000001" , false , false , false , true , true },
1295+ {"123.1230000000000000002" , "123.1230000000000000001" , false , false , false , true , true },
1296+ {"-123.1230000000000000002" , "-123.1230000000000000001" , false , true , true , false , false },
1297+ {"123.1230000000000000002" , "123.123000000001" , false , true , true , false , false },
1298+ {"-123.1230000000000000002" , "-123.123000000001" , false , false , false , true , true },
1299+ {"123.123" , "123.1230000" , true , false , true , false , true },
1300+ {"123.101" , "123.1001" , false , false , false , true , true },
1301+ {"1000000000000000000000000.1234567890123456789" , "1.1234567890123456789" , false , false , false , true , true },
1302+ {"-1000000000000000000000000.1234567890123456789" , "1.1234567890123456789" , false , true , true , false , false },
1303+ {"-1000000000000000000000000.1234567890123456789" , "-1.1234567890123456789" , false , true , true , false , false },
1304+ {"1000000000000000000000000.1234567890123456789" , "1000000000000000000000000.1234567890123456789" , true , false , true , false , true },
1305+ {"-1000000000000000000000000.1234567890123456789" , "-1000000000000000000000000.1234567890123456789" , true , false , true , false , true },
1306+ {"1000000000000000000000000.1234567890123456789" , "1000000000000000000000000.1234567890123456788" , false , false , false , true , true },
1307+ {"-1000000000000000000000000.1234567890123456789" , "-1000000000000000000000000.1234567890123456788" , false , true , true , false , false },
1308+ {"1000000000000000000000000.12345678901234" , "1000000000000000000000000.1234567890123456788" , false , true , true , false , false },
1309+ {"-1000000000000000000000000.12345678901234" , "-1000000000000000000000000.1234567890123456788" , false , false , false , true , true },
1310+ {"1000000000000000000000000.1234567890123456788" , "1000000000000000000000000.12345678901234" , false , false , false , true , true },
1311+ {"-1000000000000000000000000.1234567890123456788" , "-1000000000000000000000000.12345678901234" , false , true , true , false , false },
13081312 }
13091313
13101314 for _ , tc := range testcases {
@@ -1315,19 +1319,76 @@ func TestEqual(t *testing.T) {
13151319 b , err := Parse (tc .b )
13161320 require .NoError (t , err )
13171321
1318- c := a .Equal (b )
1319- require .Equal (t , tc .want , c )
1320-
1321- // compare with shopspring/decimal
13221322 aa := decimal .RequireFromString (tc .a )
13231323 bb := decimal .RequireFromString (tc .b )
13241324
1325+ // test equal
1326+ c := a .Equal (b )
13251327 cc := aa .Equal (bb )
1328+ require .Equal (t , tc .wantEqual , c )
1329+ require .Equal (t , cc , c )
1330+
1331+ // test less than
1332+ c = a .LessThan (b )
1333+ cc = aa .LessThan (bb )
1334+ require .Equal (t , tc .wantLT , c )
1335+ require .Equal (t , cc , c )
1336+
1337+ // test less than or equal
1338+ c = a .LessThanOrEqual (b )
1339+ cc = aa .LessThanOrEqual (bb )
1340+ require .Equal (t , tc .wantLTE , c )
1341+ require .Equal (t , cc , c )
1342+
1343+ // test greater than
1344+ c = a .GreaterThan (b )
1345+ cc = aa .GreaterThan (bb )
1346+ require .Equal (t , tc .wantGT , c )
1347+ require .Equal (t , cc , c )
1348+
1349+ // test greater than or equal
1350+ c = a .GreaterThanOrEqual (b )
1351+ cc = aa .GreaterThanOrEqual (bb )
1352+ require .Equal (t , tc .wantGTE , c )
13261353 require .Equal (t , cc , c )
13271354 })
13281355 }
13291356}
13301357
1358+ func TestMaxMin (t * testing.T ) {
1359+ testcases := []struct {
1360+ list []string
1361+ wantMax string
1362+ wantMin string
1363+ }{
1364+ {[]string {"1234567890123456789" , "0" , "1234567890123456789" , "1234567890123456789" }, "1234567890123456789" , "0" },
1365+ {[]string {"123.123" , "-123.123" , "123.123" , "-123.123" }, "123.123" , "-123.123" },
1366+ {[]string {"-1235.123124235235" , "0.11" , "5345.29809824" , "-6465465.45646" }, "5345.29809824" , "-6465465.45646" },
1367+ {[]string {"1.123" , "2.235" }, "2.235" , "1.123" },
1368+ {[]string {"-1.123" , "-2.235" }, "-1.123" , "-2.235" },
1369+ {[]string {"1.123" }, "1.123" , "1.123" },
1370+ }
1371+
1372+ for _ , tc := range testcases {
1373+ t .Run (fmt .Sprintf ("%v" , tc .list ), func (t * testing.T ) {
1374+ list := make ([]Decimal , len (tc .list ))
1375+ for i , s := range tc .list {
1376+ d , err := Parse (s )
1377+ require .NoError (t , err )
1378+ list [i ] = d
1379+ }
1380+
1381+ // test max
1382+ expectedMax := Max (list [0 ], list [1 :]... )
1383+ require .Equal (t , tc .wantMax , expectedMax .String ())
1384+
1385+ // test min
1386+ expectedMin := Min (list [0 ], list [1 :]... )
1387+ require .Equal (t , tc .wantMin , expectedMin .String ())
1388+ })
1389+ }
1390+ }
1391+
13311392func TestCmpWithDifferentPrecision (t * testing.T ) {
13321393 testcases := []struct {
13331394 a1 , a2 , b string
0 commit comments