mirror of
https://gitee.com/willfree/min-dev-java.git
synced 2026-10-04 19:42:01 +08:00
修复bytehelper & VlInt中的已知bug
This commit is contained in:
1 parent
227d10a391
commit
2ad446ca2c
29 files changed
+315
-80
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user