修复bytehelper & VlInt中的已知bug

This commit is contained in:
ghy committed 2021-03-15 20:46:03 +08:00
1 parent 227d10a391
commit 2ad446ca2c
29 files changed
+315 -80

No files matched your search

+28 -7
View File
@@ -1,8 +1,10 @@
package encoding;
import minsecurity.crypto.TestSM2;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.LoggerFactory;
import java.math.BigInteger;
@@ -17,6 +19,8 @@ import static org.junit.Assert.*;
*/
public class VlIntTest {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(VlIntTest.class);
// @Test
// public void size() {
@@ -41,7 +45,7 @@ public class VlIntTest {
}
@Test
public void getVlIntValue2Int() {
public void getVlIntValue2Int() throws VlIntException {
//vlint(int)的size小于4时,测试是否能准确转为int输出
int a = 222;
int a2 = 22222222;
@@ -66,18 +70,25 @@ public class VlIntTest {
//error:以bytes[]形式构造的VlInt,2^31-1 到 2^32-1之间的数会出错
@Test
public void getVlIntValue2Long() {
public void getVlIntValue2Long() throws VlIntException {
long l1 = new Long(0);
long l2 = new Long(1);
long l3 = new Long(4294967295L); //2^32-1
byte[] b1 = new byte[]{0x00,0x7f,(byte) 0xff,(byte) 0xff,(byte) 0xff};//2^31-1
byte[] b2= new byte[]{0x00,(byte) 0x80,0x00,0x00,0x00};//2^31
byte[] b2 = new byte[]{0x00,(byte) 0x80,0x00,0x00,0x00};//2^31
byte[] b3 = new byte[]{0,0,0,0,-128,0,0,0};
BigInteger bigInteger = new BigInteger(b2);
System.out.println(bigInteger.longValue());
System.out.println(new BigInteger(b3).longValue());
VlInt vlInt_long1 = new VlInt(l1); // size = 1
VlInt vlInt_long2 = new VlInt(l2); // size = 1
VlInt vlInt_long3 = new VlInt(l3); // size = 5
VlInt vlInt_long4 = new VlInt(b1);
VlInt vlInt_long5 = new VlInt(b2);
System.out.println(vlInt_long2.toString());
System.out.println(vlInt_long3.toString());
System.out.println(vlInt_long4.toString());
System.out.println(vlInt_long5.toString());
//以VlInt(long)形式构造的VlInt
assertEquals(vlInt_long1.getVlIntValue2Long(),l1);
assertEquals(vlInt_long2.getVlIntValue2Long(),l2);
@@ -85,6 +96,12 @@ public class VlIntTest {
///以VlInt(bytes[])形式构造的VlInt
assertEquals(vlInt_long4.getVlIntValue2Long(),2147483647L);//2^31-1
assertEquals(vlInt_long5.getVlIntValue2Long(),2147483648L);//2^31
assertEquals(vlInt_long5.getVlIntValue2Long(),2147483648L);//2^31
byte[] bytes1 = new byte[]{127,-128,-128,-128,-128,-128,-128,-128};
VlInt vlInt_6 = new VlInt(new BigInteger("21474836481"));
assertEquals(vlInt_6.getVlIntValue2Long(), new BigInteger("21474836481").longValue());
}
//error:以bytes[]形式构造的VlInt,在大于2^31-1的数会出错
@@ -157,21 +174,25 @@ public class VlIntTest {
int a1 = 0,a2 = 65535;
long l = 4294967296L;
int s1 = a2-a1,s2 = a1-a2;
// long r1 = l-a1,r2 = l-a2; //差值越界int最大值
long r1 = l-a1,r2 = l - (long)a2; //差值越界int最大值
VlInt vlInt1 = new VlInt(a1);
VlInt vlInt2 = new VlInt(a2);
VlInt vlInt3 = new VlInt(l);
logger.debug(vlInt1.toString());
logger.debug(vlInt2.toString());
logger.debug(vlInt3.toString());
assertEquals(vlInt2.subtract(vlInt1),s1);
assertEquals(vlInt1.subtract(vlInt2),s2); //差为负数
//error:差值越界int最大值
// assertEquals(vlInt3.subtract(vlInt2),r1);
assertEquals(vlInt3.subtract(vlInt2), r2);
int sum1 = a1+a2;
long sum2 = a2+l;
//param:VlInt
assertEquals(vlInt1.add(vlInt2),sum1);
// assertEquals(vlInt1.add(vlInt3),sum2); //两者之和为long,越界int最大值
assertEquals(vlInt2.add(vlInt3),sum2); //两者之和为long,越界int最大值
//param:int
assertEquals(vlInt1.add(a2),sum1);
}