Passing the current tests for the Variable class
This commit is contained in:
parent
ca12980379
commit
9114d25e09
186
src/variable.c
186
src/variable.c
|
@ -251,8 +251,190 @@ void variable_delete(Variable * variable)
|
||||||
/* variable_get_as */
|
/* variable_get_as */
|
||||||
int variable_get_as(Variable * variable, VariableType type, void * result)
|
int variable_get_as(Variable * variable, VariableType type, void * result)
|
||||||
{
|
{
|
||||||
/* FIXME implement */
|
size_t size = 0;
|
||||||
return -1;
|
void * p = NULL;
|
||||||
|
int8_t i8;
|
||||||
|
uint8_t u8;
|
||||||
|
int16_t i16;
|
||||||
|
uint16_t u16;
|
||||||
|
int32_t i32;
|
||||||
|
uint32_t u32;
|
||||||
|
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case VT_NULL:
|
||||||
|
if(variable->type == VT_NULL)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
case VT_INT8:
|
||||||
|
size = sizeof(i8);
|
||||||
|
if(variable->type == VT_INT8)
|
||||||
|
{
|
||||||
|
p = &variable->u.int8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_UINT8
|
||||||
|
&& variable->u.uint8 < (1 << 7))
|
||||||
|
i8 = variable->u.uint8;
|
||||||
|
else if(variable->type == VT_INT16
|
||||||
|
&& variable->u.int16 >= -128
|
||||||
|
&& variable->u.int16 < (1 << 7))
|
||||||
|
i8 = variable->u.int16;
|
||||||
|
else if(variable->type == VT_UINT16
|
||||||
|
&& variable->u.uint16 < (1 << 7))
|
||||||
|
i8 = variable->u.uint16;
|
||||||
|
else if(variable->type == VT_INT32
|
||||||
|
&& variable->u.int32 >= -128
|
||||||
|
&& variable->u.int32 < (1 << 7))
|
||||||
|
i8 = variable->u.int32;
|
||||||
|
else if(variable->type == VT_UINT32
|
||||||
|
&& variable->u.uint32 < (1 << 7))
|
||||||
|
i8 = variable->u.uint32;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
p = &i8;
|
||||||
|
break;
|
||||||
|
case VT_UINT8:
|
||||||
|
size = sizeof(u8);
|
||||||
|
if(variable->type == VT_UINT8)
|
||||||
|
{
|
||||||
|
p = &variable->u.uint8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_INT8
|
||||||
|
&& variable->u.int8 >= 0)
|
||||||
|
u8 = variable->u.int8;
|
||||||
|
else if(variable->type == VT_INT16
|
||||||
|
&& variable->u.int16 >= 0
|
||||||
|
&& variable->u.int16 < (1 << 8))
|
||||||
|
u8 = variable->u.int16;
|
||||||
|
else if(variable->type == VT_UINT16
|
||||||
|
&& variable->u.uint16 < (1 << 8))
|
||||||
|
u8 = variable->u.uint16;
|
||||||
|
else if(variable->type == VT_INT32
|
||||||
|
&& variable->u.int32 >= 0
|
||||||
|
&& variable->u.int32 < (1 << 8))
|
||||||
|
u8 = variable->u.int32;
|
||||||
|
else if(variable->type == VT_UINT32
|
||||||
|
&& variable->u.uint32
|
||||||
|
< (1 << 8))
|
||||||
|
u8 = variable->u.uint32;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
p = &u8;
|
||||||
|
break;
|
||||||
|
case VT_INT16:
|
||||||
|
size = sizeof(i16);
|
||||||
|
if(variable->type == VT_INT16)
|
||||||
|
{
|
||||||
|
p = &variable->u.int16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_UINT16
|
||||||
|
&& variable->u.uint16 < (1 << 15))
|
||||||
|
i16 = variable->u.uint16;
|
||||||
|
else if(variable->type == VT_INT8)
|
||||||
|
i16 = variable->u.int8;
|
||||||
|
else if(variable->type == VT_UINT8)
|
||||||
|
i16 = variable->u.uint8;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
p = &i16;
|
||||||
|
break;
|
||||||
|
case VT_UINT16:
|
||||||
|
size = sizeof(u16);
|
||||||
|
if(variable->type == VT_UINT16)
|
||||||
|
{
|
||||||
|
p = &variable->u.uint16;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_INT16 && variable->u.int16 >= 0)
|
||||||
|
u16 = variable->u.int16;
|
||||||
|
else if(variable->type == VT_INT8
|
||||||
|
&& variable->u.int8 >= 0)
|
||||||
|
u16 = variable->u.int8;
|
||||||
|
else if(variable->type == VT_UINT8)
|
||||||
|
u16 = variable->u.uint8;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
p = &u16;
|
||||||
|
break;
|
||||||
|
case VT_INT32:
|
||||||
|
size = sizeof(i32);
|
||||||
|
if(variable->type == VT_INT32)
|
||||||
|
{
|
||||||
|
p = &variable->u.int32;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_UINT32
|
||||||
|
&& variable->u.uint32
|
||||||
|
< (uint32_t)1 << 31)
|
||||||
|
i32 = variable->u.uint32;
|
||||||
|
else if(variable->type == VT_INT8)
|
||||||
|
i32 = variable->u.int8;
|
||||||
|
else if(variable->type == VT_UINT8)
|
||||||
|
i32 = variable->u.uint8;
|
||||||
|
else if(variable->type == VT_INT16)
|
||||||
|
i32 = variable->u.int16;
|
||||||
|
else if(variable->type == VT_UINT16)
|
||||||
|
i32 = variable->u.uint16;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
p = &i32;
|
||||||
|
break;
|
||||||
|
case VT_UINT32:
|
||||||
|
size = sizeof(u32);
|
||||||
|
if(variable->type == VT_UINT32)
|
||||||
|
{
|
||||||
|
p = &variable->u.uint32;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(variable->type == VT_INT32
|
||||||
|
&& variable->u.int32 >= 0)
|
||||||
|
u32 = variable->u.int32;
|
||||||
|
else if(variable->type == VT_INT8
|
||||||
|
&& variable->u.int8 >= 0)
|
||||||
|
u32 = variable->u.int8;
|
||||||
|
else if(variable->type == VT_UINT8)
|
||||||
|
u32 = variable->u.uint8;
|
||||||
|
else if(variable->type == VT_INT16
|
||||||
|
&& variable->u.int16 >= 0)
|
||||||
|
u32 = variable->u.int16;
|
||||||
|
else if(variable->type == VT_UINT16)
|
||||||
|
u32 = variable->u.uint16;
|
||||||
|
else
|
||||||
|
/* FIXME implement more conversions */
|
||||||
|
break;
|
||||||
|
size = sizeof(u32);
|
||||||
|
p = &u32;
|
||||||
|
break;
|
||||||
|
case VT_INT64:
|
||||||
|
case VT_UINT64:
|
||||||
|
/* FIXME consider signedness */
|
||||||
|
if(variable->type == VT_INT64
|
||||||
|
|| variable->type == VT_UINT64)
|
||||||
|
{
|
||||||
|
size = sizeof(variable->u.uint64);
|
||||||
|
p = &variable->u.uint64;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case VT_STRING:
|
||||||
|
/* FIXME implement */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(size != 0 && p != NULL)
|
||||||
|
{
|
||||||
|
memcpy(result, p, size);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return -error_set_code(1, "Unable to convert from type %u to %u",
|
||||||
|
variable->type, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,8 @@ target="$1"
|
||||||
|
|
||||||
> "$target"
|
> "$target"
|
||||||
FAILED=
|
FAILED=
|
||||||
./string >> "$target" || FAILED="$FAILED string"
|
./string >> "$target" 2>&1 || FAILED="$FAILED string"
|
||||||
./variable >> "$target" || FAILED="$FAILED variable"
|
./variable >> "$target" 2>&1 || FAILED="$FAILED variable"
|
||||||
[ -z "$FAILED" ] && exit 0
|
[ -z "$FAILED" ] && exit 0
|
||||||
echo "Failed tests:$FAILED" 1>&2
|
echo "Failed tests:$FAILED" 1>&2
|
||||||
exit 2
|
exit 2
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "System/error.h"
|
||||||
#include "System/variable.h"
|
#include "System/variable.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ static int _variable(char const * progname)
|
||||||
if((variable = variable_new_deserialize_type(VT_INT8, &s, p))
|
if((variable = variable_new_deserialize_type(VT_INT8, &s, p))
|
||||||
== NULL)
|
== NULL)
|
||||||
{
|
{
|
||||||
printf("%s: %d: Test failed\n", progname, samples[i]);
|
error_print(progname);
|
||||||
ret += 1;
|
ret += 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -50,7 +51,7 @@ static int _variable(char const * progname)
|
||||||
if(variable_get_as(variable, VT_INT32, p) != 0
|
if(variable_get_as(variable, VT_INT32, p) != 0
|
||||||
|| j != samples[i])
|
|| j != samples[i])
|
||||||
{
|
{
|
||||||
printf("%s: %d: Test failed\n", progname, samples[i]);
|
error_print(progname);
|
||||||
ret += 1;
|
ret += 1;
|
||||||
}
|
}
|
||||||
variable_delete(variable);
|
variable_delete(variable);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user