예제 #1
0
void _SwarmVariable_ValueAtChar( void* swarmVariable, Particle_Index lParticle_I, double* value ) {
	SwarmVariable*	self     = (SwarmVariable*)swarmVariable;
	Variable*       variable = self->variable;
	Dof_Index       dofCount = self->dofCount;
	Dof_Index       dof_I;

	for ( dof_I = 0 ; dof_I < dofCount ; dof_I++ ) {
		value[ dof_I ] = (double) Variable_GetValueAtChar( variable, lParticle_I, dof_I );
	}
}
void VariableSuite_TestVariable_Char( VariableSuiteData* data ) {
    typedef char Triple[3];
    char* array;
    Triple* structArray;
    Index length = 10;
    /* List of values to test the variable with.
     * Values to test are hex 5's and a's because they are a series of 0101 and 1010 respectively so they test
     * each bit in memory to read/set.
     */
    long int testValues[] = { 0x55, 0xaa };
    Index testValueCount = 2;
    Index test_I;
    long int testValue;
    Variable* var;
    Variable* vec;
    Variable* vecVar[3];
    int i, j;

    array = Memory_Alloc_Array( char, length, "test" );
    structArray = Memory_Alloc_Array( Triple, length, "test" );

    var = Variable_NewScalar( "Char-Scalar", NULL, Variable_DataType_Char, &length, NULL, (void**)&array, data->vr );
    vec = Variable_NewVector( "Char-Three", NULL, Variable_DataType_Char, 3, &length, NULL, (void**)&structArray, data->vr, "a", "b", "c" );

    vecVar[0] = Variable_Register_GetByName( data->vr, "a" );
    vecVar[1] = Variable_Register_GetByName( data->vr, "b" );
    vecVar[2] = Variable_Register_GetByName( data->vr, "c" );

    Variable_Register_BuildAll( data->vr );

    for ( test_I = 0; test_I < testValueCount; ++test_I ) {

        testValue = testValues[test_I];

        for ( i = 0; i < length; ++i ) {
            Variable_SetValueChar( var, i, testValue );
            Variable_SetValueAtChar( vec, i, 0, testValue );
            Variable_SetValueAtChar( vec, i, 1, testValue );
            Variable_SetValueAtChar( vec, i, 2, testValue );
        }

        /* ~~~Scalar~~~*/
        for ( i = 0; i < length; ++i ) {
            pcu_check_true( Variable_GetValueChar( var, i ) == (char)(char)testValue );
            pcu_check_true( Variable_GetValueCharAsShort( var, i ) == (short)(char)testValue );
            pcu_check_true( Variable_GetValueCharAsInt( var, i ) == (int)(char)testValue );
            pcu_check_true( Variable_GetValueCharAsFloat( var, i ) == (float)(char)testValue );
            pcu_check_true( Variable_GetValueCharAsDouble( var, i ) == (double)(char)testValue );
        }

        /*~~~Vector~~~*/
        for ( i = 0; i < length; ++i ) {
            pcu_check_true( Variable_GetValueAtChar( vec, i, 0 ) == (char)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsShort( vec, i, 0 ) == (short)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsInt( vec, i, 0 ) == (int)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsFloat( vec, i, 0 ) == (float)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsDouble( vec, i, 0 ) == (double)(char)testValue );

            pcu_check_true( Variable_GetPtrAtChar( vec, i, 0 ) == &structArray[i][0] );

            pcu_check_true( Variable_GetValueAtChar( vec, i, 1 ) == (char)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsShort( vec, i, 1 ) == (short)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsInt( vec, i, 1 ) == (int)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsFloat( vec, i, 1 ) == (float)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsDouble( vec, i, 1 ) == (double)(char)testValue );
            pcu_check_true( Variable_GetPtrAtChar( vec, i, 1 ) == &structArray[i][1] );

            pcu_check_true( Variable_GetValueAtChar( vec, i, 2 ) == (char)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsShort( vec, i, 2 ) == (short)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsInt( vec, i, 2 ) == (int)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsFloat( vec, i, 2 ) == (float)(char)testValue );
            pcu_check_true( Variable_GetValueAtCharAsDouble( vec, i, 2 ) == (double)(char)testValue );
            pcu_check_true( Variable_GetPtrAtChar( vec, i, 2 ) == &structArray[i][2] );
        }

        /*~~~Vector: Sub-Variable~~~*/
        for ( i = 0; i < length; ++i ) {
            for ( j = 0; j < 3; ++j ) {
                pcu_check_true( _Variable_GetStructPtr( vecVar[j], i ) == &structArray[i][j] );
            }
        }
    }
}