From ea1133b2102a23b024349e4e1cb2dd77aee0c354 Mon Sep 17 00:00:00 2001 From: Istvan Miklos Date: Thu, 17 May 2018 10:29:52 +0200 Subject: [PATCH] Add tests for TypedArrays by using indexing api. (#2249) JerryScript-DCO-1.0-Signed-off-by: Istvan Miklos imiklos2@inf.u-szeged.hu --- tests/unit-core/test-typedarray.c | 117 ++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/tests/unit-core/test-typedarray.c b/tests/unit-core/test-typedarray.c index 628ed56bb..53585c0f4 100644 --- a/tests/unit-core/test-typedarray.c +++ b/tests/unit-core/test-typedarray.c @@ -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[] =