summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/options.cpp2
-rw-r--r--src/packedintarray.cpp7
-rw-r--r--src/unitnumber.cpp14
-rw-r--r--src/unitnumber.h1
4 files changed, 18 insertions, 6 deletions
diff --git a/src/options.cpp b/src/options.cpp
index 89397f4..4fcf1e2 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -17,7 +17,7 @@ Options::~Options()
17{ 17{
18} 18}
19 19
20int Options::selfTest( Bu::StringArray aArgs ) 20int Options::selfTest( Bu::StringArray )
21{ 21{
22 UnitNumber().run(); 22 UnitNumber().run();
23 23
diff --git a/src/packedintarray.cpp b/src/packedintarray.cpp
index b91358e..824f589 100644
--- a/src/packedintarray.cpp
+++ b/src/packedintarray.cpp
@@ -4,7 +4,7 @@
4 4
5#define bitsizeof( x ) ((sizeof(x))*8) 5#define bitsizeof( x ) ((sizeof(x))*8)
6#define StoreBits ((bitsizeof(PackedIntArray::Store))) 6#define StoreBits ((bitsizeof(PackedIntArray::Store)))
7#define StoreCount( x ) (((x*iBitWidth)/StoreBits)+(((x*iBitWidth)%StoreBits)?1:0)) 7#define StoreCount( x ) ((((x)*iBitWidth)/StoreBits)+((((x)*iBitWidth)%StoreBits)?1:0))
8 8
9PackedIntArray::PackedIntArray( PackedIntArray::Unit iBitWidth ) : 9PackedIntArray::PackedIntArray( PackedIntArray::Unit iBitWidth ) :
10 iBitWidth( iBitWidth ), 10 iBitWidth( iBitWidth ),
@@ -207,10 +207,11 @@ void PackedIntArray::checkCapacity()
207 { 207 {
208// Bu::println("!!! Resizing !!!"); 208// Bu::println("!!! Resizing !!!");
209 Store *aOldData = aData; 209 Store *aOldData = aData;
210 int iSize = StoreCount(iCapacity);
210 int iNewSize = (iCapacity==0)?(bitsizeof(Store)/iBitWidth):(iCapacity=StoreCount(iCapacity*2)); 211 int iNewSize = (iCapacity==0)?(bitsizeof(Store)/iBitWidth):(iCapacity=StoreCount(iCapacity*2));
211 while( iNewSize < iCount ) 212 int iCountSize = StoreCount(iCount);
213 while( iNewSize < iCountSize )
212 iNewSize *= 2; 214 iNewSize *= 2;
213 int iSize = StoreCount(iCapacity);
214// Bu::println(" %1 => %2 (%3 bit words)").arg( iSize ).arg( iNewSize ) 215// Bu::println(" %1 => %2 (%3 bit words)").arg( iSize ).arg( iNewSize )
215// .arg( StoreBits ); 216// .arg( StoreBits );
216 aData = new Store[iNewSize]; 217 aData = new Store[iNewSize];
diff --git a/src/unitnumber.cpp b/src/unitnumber.cpp
index d4bc7a8..79797c9 100644
--- a/src/unitnumber.cpp
+++ b/src/unitnumber.cpp
@@ -5,6 +5,8 @@
5UnitNumber::UnitNumber() 5UnitNumber::UnitNumber()
6{ 6{
7 setName("Number"); 7 setName("Number");
8 add( static_cast<Bu::UnitSuite::Test>(&UnitNumber::parse1),
9 "parse1", Bu::UnitSuite::expectPass );
8 add( static_cast<Bu::UnitSuite::Test>(&UnitNumber::multiply1), 10 add( static_cast<Bu::UnitSuite::Test>(&UnitNumber::multiply1),
9 "multiply1", Bu::UnitSuite::expectPass ); 11 "multiply1", Bu::UnitSuite::expectPass );
10} 12}
@@ -13,10 +15,18 @@ UnitNumber::~UnitNumber()
13{ 15{
14} 16}
15 17
18void UnitNumber::parse1()
19{
20 unitTest( Number("121932631356500531347203169112635269").toString() ==
21 "121932631356500531347203169112635269" );
22}
23
16void UnitNumber::multiply1() 24void UnitNumber::multiply1()
17{ 25{
26 unitTest(Number("123456789") * Number("987654321") == "121932631112635269");
18 unitTest( 27 unitTest(
19 (Number("123456789123456789") * Number("987654321987654321")).toString() 28 Number("123456789123456789") * Number("987654321987654321") ==
20 == "121932631356500531347203169112635269" ); 29 "121932631356500531347203169112635269"
30 );
21} 31}
22 32
diff --git a/src/unitnumber.h b/src/unitnumber.h
index 89b1c0f..76496b9 100644
--- a/src/unitnumber.h
+++ b/src/unitnumber.h
@@ -9,6 +9,7 @@ public:
9 UnitNumber(); 9 UnitNumber();
10 virtual ~UnitNumber(); 10 virtual ~UnitNumber();
11 11
12 void parse1();
12 void multiply1(); 13 void multiply1();
13}; 14};
14 15