Changeset 965
- Timestamp:
- Jun 9, 2004, 2:29:09 PM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 7 edited
-
src/collections/psBitSet.c (modified) (6 diffs)
-
src/collections/psBitSet.h (modified) (6 diffs)
-
src/types/psBitSet.c (modified) (6 diffs)
-
src/types/psBitSet.h (modified) (6 diffs)
-
test/collections/tst_psBitSet_01.c (modified) (4 diffs)
-
test/collections/tst_psBitSet_05.c (modified) (3 diffs)
-
test/collections/tst_psBitSet_06.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/psBitSet.c
r952 r965 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-06- 09 21:18:24$12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:29:09 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include <stdio.h> 23 23 #include <ctype.h> 24 #include <math.h> 24 25 25 26 #include "psBitSet.h" … … 77 78 psBitSet* psBitSetAlloc(int n) 78 79 { 80 int numBytes = 0; 79 81 psBitSet *newObj = NULL; 80 82 … … 84 86 } 85 87 88 numBytes = ceil(n/8.0); 86 89 newObj = psAlloc(sizeof(psBitSet)); 87 newObj->n = n ;90 newObj->n = numBytes; 88 91 89 92 // Ignore splint warning about releasing pointer members, since they've not been allocated yet 90 93 /*@i@*/ 91 newObj->bits = psAlloc(sizeof(char)*n );92 memset(newObj->bits, n , 0);94 newObj->bits = psAlloc(sizeof(char)*numBytes); 95 memset(newObj->bits, numBytes, 0); 93 96 94 97 return newObj; … … 113 116 return inBitSet; 114 117 } else if(bit < 0) { 115 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 118 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 119 return inBitSet; 120 } else if(bit > inBitSet->n*8-1) { 121 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 116 122 return inBitSet; 117 123 } … … 132 138 return 0; 133 139 } else if(bit < 0) { 134 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 140 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 141 return 0; 142 } else if(bit > inBitSet->n*8-1) { 143 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 135 144 return 0; 136 145 } -
trunk/psLib/src/collections/psBitSet.h
r614 r965 4 4 * 5 5 * Bit masks are useful tools for toggling various flags and options. This set of functions module provides 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 7 7 * operations. A print function is also provided to display the entire set of bits in binary format as a 8 8 * string. 9 9 * 10 10 * @author Ross Harman, MHPCC 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-0 5-08 00:08:27$11 * 12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:28:58 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 /** Struct containing array of bytes to hold bit data and corresponding array length. 26 26 * 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 28 28 * arranged with the LSB in first (right most) position of the first array element. 29 29 */ … … 41 41 /** Allocate a psBitSet. 42 42 * 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 44 44 * allocation. 45 45 * … … 48 48 /*@null@*/ 49 49 psBitSet* psBitSetAlloc( 50 int n /**< Number of b ytes in psBitSet array */50 int n /**< Number of bits in psBitSet array */ 51 51 ); 52 52 … … 61 61 /** Set a bit. 62 62 * 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 64 64 * first bit set in the zero bit slot of the zero element of the byte array. As an example, setting bit 3 in 65 65 * an array with two elements would result in an psBitSet that looks like 00000000 00001000. … … 74 74 /** Test the value of a bit. 75 75 * 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 78 78 * As an example, testing bit 3 in a psBitSet with two bytes that looks like 00000000 00001000 would return a 79 79 * value of one, since that is the value that was set. -
trunk/psLib/src/types/psBitSet.c
r952 r965 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-06- 09 21:18:24$12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:29:09 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 22 22 #include <stdio.h> 23 23 #include <ctype.h> 24 #include <math.h> 24 25 25 26 #include "psBitSet.h" … … 77 78 psBitSet* psBitSetAlloc(int n) 78 79 { 80 int numBytes = 0; 79 81 psBitSet *newObj = NULL; 80 82 … … 84 86 } 85 87 88 numBytes = ceil(n/8.0); 86 89 newObj = psAlloc(sizeof(psBitSet)); 87 newObj->n = n ;90 newObj->n = numBytes; 88 91 89 92 // Ignore splint warning about releasing pointer members, since they've not been allocated yet 90 93 /*@i@*/ 91 newObj->bits = psAlloc(sizeof(char)*n );92 memset(newObj->bits, n , 0);94 newObj->bits = psAlloc(sizeof(char)*numBytes); 95 memset(newObj->bits, numBytes, 0); 93 96 94 97 return newObj; … … 113 116 return inBitSet; 114 117 } else if(bit < 0) { 115 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 118 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 119 return inBitSet; 120 } else if(bit > inBitSet->n*8-1) { 121 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 116 122 return inBitSet; 117 123 } … … 132 138 return 0; 133 139 } else if(bit < 0) { 134 psError(__func__, " : Line %d - Negative bit position not allowed: %d\n", __LINE__, bit); 140 psError(__func__, " : Line %d - Bit position too small: %d\n", __LINE__, bit); 141 return 0; 142 } else if(bit > inBitSet->n*8-1) { 143 psError(__func__, " : Line %d - Bit position too large: %d\n", __LINE__, bit); 135 144 return 0; 136 145 } -
trunk/psLib/src/types/psBitSet.h
r614 r965 4 4 * 5 5 * Bit masks are useful tools for toggling various flags and options. This set of functions module provides 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 6 * a mechanism to create an array of bits of arbitrary length and manipulate them with basic binary 7 7 * operations. A print function is also provided to display the entire set of bits in binary format as a 8 8 * string. 9 9 * 10 10 * @author Ross Harman, MHPCC 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-0 5-08 00:08:27$11 * 12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:28:58 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 /** Struct containing array of bytes to hold bit data and corresponding array length. 26 26 * 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 27 * The bits in the struct are assembled in as an array of bytes with eight bits per byte. The bits are 28 28 * arranged with the LSB in first (right most) position of the first array element. 29 29 */ … … 41 41 /** Allocate a psBitSet. 42 42 * 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 43 * Create a psBitSet with the number of bytes specified by the user. All bits are set to zero upon 44 44 * allocation. 45 45 * … … 48 48 /*@null@*/ 49 49 psBitSet* psBitSetAlloc( 50 int n /**< Number of b ytes in psBitSet array */50 int n /**< Number of bits in psBitSet array */ 51 51 ); 52 52 … … 61 61 /** Set a bit. 62 62 * 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 63 * Sets a bit at a given bit location, either one or zero. The bit is set based on a zero index with the 64 64 * first bit set in the zero bit slot of the zero element of the byte array. As an example, setting bit 3 in 65 65 * an array with two elements would result in an psBitSet that looks like 00000000 00001000. … … 74 74 /** Test the value of a bit. 75 75 * 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 76 * Prints the value of a bit at a given bit location, either one or zero. The resulting bit is based on a 77 * zero index format with the first bit set in the zero bit slot of the zero element of the byte array 78 78 * As an example, testing bit 3 in a psBitSet with two bytes that looks like 00000000 00001000 would return a 79 79 * value of one, since that is the value that was set. -
trunk/psLib/test/collections/tst_psBitSet_01.c
r717 r965 5 5 * This test driver contains the following tests for psArray test point 1: 6 6 * A) Create psBitSet 7 * B) Set single bit 8 * C) Test single bit 9 * D) Free psBitSet 7 * B) Set bits 8 * C) Test bits 9 * D) Attempt to test negative bit 10 * E) Attempt to test bit to large 11 * F) Attempt to test bit in null BitSet 12 * G) Attempt to set negative bit 13 * H) Attempt to set bit to large 14 * I) Attempt to set bit in null BitSet 15 * J) Free psBitSet 10 16 * 11 17 * @author Ross Harman, MHPCC 12 18 * 13 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-0 5-18 19:22:34$19 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 20 * @date $Date: 2004-06-10 00:28:23 $ 15 21 * 16 22 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 31 { 26 32 char *binOut = NULL; 33 psBitSet *tempBs = NULL; 27 34 28 35 … … 30 37 printPositiveTestHeader(stdout,"psBitSet", "Create psBitSet"); 31 38 printf("Creating psBitSet with 24 bits...\n"); 32 psBitSet* bs = psBitSetAlloc( 3);39 psBitSet* bs = psBitSetAlloc(24); 33 40 binOut = psBitSetToString(bs); 34 41 printf("%s\n\n", binOut); … … 37 44 38 45 39 // Test B - Set single bit 40 printPositiveTestHeader(stdout, "psBitSet", "Set single bit"); 46 // Test B - Set bits 47 printPositiveTestHeader(stdout, "psBitSet", "Set bits"); 48 tempBs = bs; 49 printf("Setting first bit...\n"); 50 bs = psBitSetSet(bs, 0); 41 51 printf("Setting third bit...\n"); 42 52 bs = psBitSetSet(bs, 2); 53 printf("Setting last bit...\n"); 54 bs = psBitSetSet(bs, 23); 55 if(bs != tempBs) { 56 printf("Error: Return pointer not equal to output argument pointer\n"); 57 } 43 58 binOut = psBitSetToString(bs); 44 59 printf("%s\n\n", binOut); 45 60 psFree(binOut); 46 printFooter(stdout, "psBitSet", "Set single bit", true);61 printFooter(stdout, "psBitSet", "Set bits", true); 47 62 48 63 49 // Test C - Test single bit 50 printPositiveTestHeader(stdout, "psBitSet", "Test single bit"); 64 // Test C - Test bits 65 printPositiveTestHeader(stdout, "psBitSet", "Test bits"); 66 printf("Testing first bit...\n"); 67 printf("Result: %d\n", psBitSetTest(bs, 0)); 51 68 printf("Testing third bit...\n"); 52 69 printf("Result: %d\n", psBitSetTest(bs, 2)); 53 printFooter(stdout, "psBitSet", "Test single bit", true); 70 printf("Testing last bit...\n"); 71 printf("Result: %d\n", psBitSetTest(bs, 23)); 72 printFooter(stdout, "psBitSet", "Test bits", true); 54 73 55 74 56 // Test D - Free psBitSet 75 // Test D - Attempt to test negative bit 76 printNegativeTestHeader(stdout,"psBitSet", "Attempt to test negative bit", 77 "Bit position too small: -4", 0); 78 if(psBitSetTest(bs, -4)) { 79 printf("Error: Return value should be zero\n"); 80 } 81 printFooter(stdout, "psBitSet", "Attempt to test negative bit", true); 82 83 84 // Test E - Attempt to test bit to large 85 printNegativeTestHeader(stdout,"psBitSet", "Attempt to test bit to large", 86 "Bit position too large: 200", 0); 87 if(psBitSetTest(bs, 200)) { 88 printf("Error: Return value should be zero\n"); 89 } 90 printFooter(stdout, "psBitSet", "Attempt to test bit to large", true); 91 92 93 // Test F - Attempt to test bit in null BitSet 94 printNegativeTestHeader(stdout,"psBitSet", "Attempt to test bit in null BitSet", 95 "Null psBitSet for inBitSet argument", 0); 96 psBitSetTest(NULL, 0); 97 printFooter(stdout, "psBitSet", "Attempt to test bit in null BitSet", true); 98 99 100 // Test G - Attempt to set negative bit 101 printNegativeTestHeader(stdout,"psBitSet", "Attempt to set negative bit", 102 "Bit position too small: -4", 0); 103 bs = psBitSetSet(bs, -4); 104 printFooter(stdout, "psBitSet", "Attempt to set negative bit", true); 105 106 107 // Test H - Attempt to set bit to large 108 printNegativeTestHeader(stdout,"psBitSet", "Attempt to set bit to large", 109 "Bit position too large: 200", 0); 110 bs = psBitSetSet(bs, 200); 111 printFooter(stdout, "psBitSet", "Attempt to set bit to large", true); 112 113 114 // Test I - Attempt to set bit in null BitSet 115 printNegativeTestHeader(stdout,"psBitSet", "Attempt to set bit in null BitSet", 116 "Null psBitSet for inBitSet argument", 0); 117 psBitSetSet(NULL, 0); 118 printFooter(stdout, "psBitSet", "Attempt to set bit in null BitSet", true); 119 120 121 // Test J - Free psBitSet 57 122 printPositiveTestHeader(stdout, "psBitSet", "Free psBitSet"); 58 123 psBitSetFree(bs); -
trunk/psLib/test/collections/tst_psBitSet_05.c
r717 r965 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 3$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-0 5-18 19:22:34$12 * @version $Revision: 1.4 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-06-10 00:28:36 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 28 28 // Test A - Create two psBitSets 29 29 printPositiveTestHeader(stdout,"psBitSet", "Create two psBitSets of different size"); 30 psBitSet* bs1 = psBitSetAlloc( 3);31 psBitSet* bs2 = psBitSetAlloc( 5);30 psBitSet* bs1 = psBitSetAlloc(24); 31 psBitSet* bs2 = psBitSetAlloc(40); 32 32 binOut = psBitSetToString(bs1); 33 33 printf("%s\n", binOut); … … 41 41 // Test B - Attempt OR with psBitsets, should get error 42 42 printNegativeTestHeader(stdout, "psBitSet", "Attempt OR with psBitsets", "psBitSet sizes not the same", 0); 43 psBitSet* outbs = psBitSetAlloc( 3);43 psBitSet* outbs = psBitSetAlloc(24); 44 44 outbs = psBitSetOp(outbs, bs1, "OR", bs2); 45 45 printFooter(stdout, "psBitSet", "Attempt OR with psBitsets", true); -
trunk/psLib/test/collections/tst_psBitSet_06.c
r957 r965 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-06- 09 21:29:56$14 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-06-10 00:28:43 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 30 30 // Test A - Create two psBitSets 31 31 printPositiveTestHeader(stdout,"psBitSet", "Create two psBitSets"); 32 psBitSet* bs1 = psBitSetAlloc( 3);33 psBitSet* bs2 = psBitSetAlloc( 3);32 psBitSet* bs1 = psBitSetAlloc(24); 33 psBitSet* bs2 = psBitSetAlloc(24); 34 34 binOut = psBitSetToString(bs1); 35 35 printf("%s\n", binOut); … … 44 44 printNegativeTestHeader(stdout,"psBitSet", "Perform invalid binary operation", 45 45 "Invalid psBitMask binary operation", 0); 46 psBitSet* outbs = psBitSetAlloc( 3);46 psBitSet* outbs = psBitSetAlloc(24); 47 47 outbs = psBitSetOp(outbs, bs1, "ZZXOR", bs2); 48 48 printFooter(stdout, "psBitSet", "Perform binary XOR with psBitSets", true);
Note:
See TracChangeset
for help on using the changeset viewer.
