Add tests for TypedArrays by using indexing api. (#2249)

JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos imiklos2@inf.u-szeged.hu
This commit is contained in:
Istvan Miklos 2018-05-17 10:29:52 +02:00 committed by László Langó
parent 36f6435eb8
commit ea1133b210

View File

@ -303,6 +303,121 @@ test_typedarray_complex_creation (test_entry_t test_entries[], /**< test cases *
}
} /* test_typedarray_complex_creation */
/**
* Test get/set/delete property by index.
*/
static void test_property_by_index (test_entry_t test_entries[])
{
int test_int_numbers[5] = {-5, -70, 13, 0, 56};
double test_double_numbers[5] = {-83.153, -35.15, 0, 13.1, 89.8975};
uint8_t test_uint_numbers[5] = {83, 15, 36, 0, 43};
for (uint32_t i = 0; test_entries[i].constructor_name != NULL; i++)
{
jerry_value_t test_number;
uint32_t test_numbers_length = sizeof (test_int_numbers) / sizeof (int);
jerry_value_t typedarray = jerry_create_typedarray (test_entries[i].typedarray_type, test_numbers_length);
jerry_typedarray_type_t type = jerry_get_typedarray_type (typedarray);
jerry_value_t set_result;
jerry_value_t get_result;
switch (type)
{
case JERRY_TYPEDARRAY_INT8:
case JERRY_TYPEDARRAY_INT16:
case JERRY_TYPEDARRAY_INT32:
{
for (uint8_t j = 0; j < test_numbers_length; j++)
{
test_number = jerry_create_number (test_int_numbers[j]);
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
set_result = jerry_set_property_by_index (typedarray, j, test_number);
get_result = jerry_get_property_by_index (typedarray, j);
TEST_ASSERT (jerry_value_is_boolean (set_result));
TEST_ASSERT (jerry_get_boolean_value (set_result));
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
TEST_ASSERT (jerry_get_number_value (get_result) == test_int_numbers[j]);
jerry_release_value (test_number);
jerry_release_value (set_result);
jerry_release_value (get_result);
}
break;
}
case JERRY_TYPEDARRAY_FLOAT32:
case JERRY_TYPEDARRAY_FLOAT64:
{
for (uint8_t j = 0; j < test_numbers_length; j++)
{
test_number = jerry_create_number (test_double_numbers[j]);
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
set_result = jerry_set_property_by_index (typedarray, j, test_number);
get_result = jerry_get_property_by_index (typedarray, j);
TEST_ASSERT (jerry_value_is_boolean (set_result));
TEST_ASSERT (jerry_get_boolean_value (set_result));
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
double epsilon = pow (10, -5);
double get_abs = fabs (jerry_get_number_value (get_result) - test_double_numbers[j]);
TEST_ASSERT (get_abs < epsilon);
jerry_release_value (test_number);
jerry_release_value (set_result);
jerry_release_value (get_result);
/* Testing positive and negative infinity */
for (uint8_t k = 0; k < 2; k++)
{
jerry_value_t inf = jerry_create_number_infinity (k);
jerry_value_t set_inf = jerry_set_property_by_index (typedarray, 0, inf);
TEST_ASSERT (jerry_value_is_boolean (set_inf));
TEST_ASSERT (jerry_get_boolean_value (set_inf));
jerry_value_t get_inf = jerry_get_property_by_index (typedarray, 0);
TEST_ASSERT (isinf (jerry_get_number_value (get_inf)));
jerry_release_value (inf);
jerry_release_value (set_inf);
jerry_release_value (get_inf);
}
}
break;
}
default:
{
for (uint8_t j = 0; j < test_numbers_length; j++)
{
test_number = jerry_create_number (test_uint_numbers[j]);
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
set_result = jerry_set_property_by_index (typedarray, j, test_number);
get_result = jerry_get_property_by_index (typedarray, j);
TEST_ASSERT (jerry_value_is_boolean (set_result));
TEST_ASSERT (jerry_get_boolean_value (set_result));
TEST_ASSERT (!jerry_delete_property_by_index (typedarray, j));
TEST_ASSERT (jerry_get_number_value (get_result) == test_uint_numbers[j]);
jerry_release_value (test_number);
jerry_release_value (set_result);
jerry_release_value (get_result);
}
break;
}
}
jerry_value_t set_undefined = jerry_set_property_by_index (typedarray, 100, jerry_create_number (50));
TEST_ASSERT (jerry_value_has_error_flag (set_undefined));
jerry_value_t get_undefined = jerry_get_property_by_index (typedarray, 100);
TEST_ASSERT (jerry_value_is_undefined (get_undefined));
jerry_release_value (set_undefined);
jerry_release_value (get_undefined);
jerry_release_value (typedarray);
}
} /* test_property_by_index */
int
main (void)
{
@ -414,6 +529,8 @@ main (void)
test_typedarray_complex_creation (test_entries, false);
test_typedarray_complex_creation (test_entries, true);
test_property_by_index (test_entries);
/* test invalid things */
{
jerry_value_t values[] =