Update testing folder
MODIFY
testing/CMakeLists.txt
testing/CMakeLists.txt
@@ -77,68 +77,72 @@ endfunction()
# Tests
# ****************************************************************************
-#add_thrust_test("adjacent_difference") # error: call to implicitly-deleted default constructor of 'union (anonymous union at ../../thrust/../thrust/system/hip/detail/adjacent_difference.h:168:31)'
- # } storage;
- # ^
-#add_thrust_test("advance") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("adjacent_difference")
+add_thrust_test("advance")
+add_thrust_test("alignment")
add_thrust_test("allocator")
-#add_thrust_test("allocator_aware_policies")
-#add_thrust_test("async_copy")
-#add_thrust_test("async_reduce")
-#add_thrust_test("async_sort")
-#add_thrust_test("binary_search")
-#add_thrust_test("binary_search_descending")
-#add_thrust_test("binary_search_vector")
-#add_thrust_test("binary_search_vector_descending")
+add_thrust_test("allocator_aware_policies")
+add_thrust_test("async_copy")
+add_thrust_test("async_for_each")
+add_thrust_test("async_reduce")
+add_thrust_test("async_reduce_into")
+add_thrust_test("async_sort")
+add_thrust_test("async_transform")
+add_thrust_test("binary_search")
+add_thrust_test("binary_search_descending")
+add_thrust_test("binary_search_vector")
+add_thrust_test("binary_search_vector_descending")
add_thrust_test("complex")
add_thrust_test("complex_transform")
-#add_thrust_test("constant_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("copy") # # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("copy_n") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("count") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("constant_iterator")
+add_thrust_test("copy")
+add_thrust_test("copy_n")
+add_thrust_test("count")
add_thrust_test("counting_iterator")
add_thrust_test("cstdint")
-#add_thrust_test("dependencies_aware_policies")
+add_thrust_test("dependencies_aware_policies")
add_thrust_test("dereference")
add_thrust_test("device_delete")
add_thrust_test("device_ptr")
add_thrust_test("device_reference")
add_thrust_test("discard_iterator")
add_thrust_test("distance")
-#add_thrust_test("equal") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("fill") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("find") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("for_each")
+add_thrust_test("equal")
+add_thrust_test("event")
+add_thrust_test("fill")
+add_thrust_test("find")
+add_thrust_test("for_each")
+add_thrust_test("functional")
add_thrust_test("functional_arithmetic")
add_thrust_test("functional_bitwise")
-#add_thrust_test("functional") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
add_thrust_test("functional_logical")
-#add_thrust_test("functional_placeholders_arithmetic") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("functional_placeholders_arithmetic")
add_thrust_test("functional_placeholders_bitwise")
add_thrust_test("functional_placeholders_compound_assignment")
-#add_thrust_test("functional_placeholders_logical") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("functional_placeholders_logical")
add_thrust_test("functional_placeholders_miscellaneous")
-#add_thrust_test("functional_placeholders_relational") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("functional_placeholders_relational")
+add_thrust_test("future")
add_thrust_test("gather")
-#add_thrust_test("generate")
-#add_thrust_test("generate_const_iterators") # error: cannot use 'throw' in __host__ __device__ function
- # error: no member named 'cudaMemcpyToSymbol' in the global namespace; did you mean 'hipMemcpyToSymbol'?
-#add_thrust_test("inner_product") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("is_partitioned") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("is_sorted") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("is_sorted_until") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-# add_thrust_test("logical") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("max_element") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("generate")
+add_thrust_test("generate_const_iterators")
+add_thrust_test("inner_product")
+add_thrust_test("is_contiguous_iterator")
+add_thrust_test("is_operator_function_object")
+add_thrust_test("is_partitioned")
+add_thrust_test("is_sorted")
+add_thrust_test("is_sorted_until")
+add_thrust_test("logical")
+add_thrust_test("max_element")
add_thrust_test("memory")
-#add_thrust_test("merge_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("merge") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("merge")
+add_thrust_test("merge_by_key")
add_thrust_test("merge_key_value")
add_thrust_test("metaprogamming")
add_thrust_test("minmax_element")
add_thrust_test("min_and_max")
-#add_thrust_test("min_element") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("minmax_element") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("mismatch") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("min_element")
+add_thrust_test("mismatch")
add_thrust_test("mr_disjoint_pool")
add_thrust_test("mr_new")
add_thrust_test("mr_pool")
@@ -150,60 +154,58 @@ add_thrust_test("pair_scan_by_key")
add_thrust_test("pair_sort")
add_thrust_test("pair_sort_by_key")
add_thrust_test("pair_transform")
-#add_thrust_test("partition") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("partition_point") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("partition")
+add_thrust_test("partition_point")
add_thrust_test("permutation_iterator")
add_thrust_test("preprocessor")
add_thrust_test("random")
+add_thrust_test("reduce")
add_thrust_test("reduce_by_key")
-#add_thrust_test("reduce") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
add_thrust_test("reduce_large")
-#add_thrust_test("remove") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("replace") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("reverse") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("reverse_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("scan_by_key") # ../../testing/scan_by_key.cu:266:16: error: no viable conversion from 'const thrust::device_reference<custom_numeric>' to 'bool'
- # return b ? false : true;
- # ^
-#add_thrust_test("scan") # ../../testing/scan.cu:540:1: error: unterminated /* comment
+add_thrust_test("remove")
+add_thrust_test("replace")
+add_thrust_test("reverse")
+add_thrust_test("reverse_iterator")
+add_thrust_test("scan")
+add_thrust_test("scan_by_key")
add_thrust_test("scatter")
-#add_thrust_test("sequence") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_difference_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_difference_by_key_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_difference") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_difference_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("sequence")
+add_thrust_test("set_difference")
+add_thrust_test("set_difference_by_key")
+add_thrust_test("set_difference_by_key_descending")
+add_thrust_test("set_difference_descending")
add_thrust_test("set_difference_key_value")
-#add_thrust_test("set_intersection_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_intersection_by_key_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_intersection") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_intersection_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("set_intersection")
+add_thrust_test("set_intersection_by_key")
+add_thrust_test("set_intersection_by_key_descending")
+add_thrust_test("set_intersection_descending")
add_thrust_test("set_intersection_key_value")
-#add_thrust_test("set_symmetric_difference_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_symmetric_difference_by_key_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_symmetric_difference") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_symmetric_difference_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_union_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_union_by_key_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_union") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("set_union_descending") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("set_symmetric_difference")
+add_thrust_test("set_symmetric_difference_by_key")
+add_thrust_test("set_symmetric_difference_by_key_descending")
+add_thrust_test("set_symmetric_difference_descending")
+add_thrust_test("set_union")
+add_thrust_test("set_union_by_key")
+add_thrust_test("set_union_by_key_descending")
+add_thrust_test("set_union_descending")
add_thrust_test("set_union_key_value")
-#add_thrust_test("sort_by_key") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("sort")
+add_thrust_test("sort_by_key")
add_thrust_test("sort_by_key_variable_bits")
-#add_thrust_test("sort") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("sort_permutation_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("sort_permutation_iterator")
add_thrust_test("sort_variable_bits")
add_thrust_test("stable_sort")
add_thrust_test("stable_sort_by_key")
add_thrust_test("stable_sort_by_key_large")
add_thrust_test("stable_sort_large")
-#add_thrust_test("swap_ranges") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("tabulate") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("transform") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("transform_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("transform_output_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
-#add_thrust_test("transform_reduce") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("swap_ranges")
+add_thrust_test("tabulate")
+add_thrust_test("transform")
+add_thrust_test("transform_iterator")
+add_thrust_test("transform_output_iterator")
+add_thrust_test("transform_reduce")
add_thrust_test("transform_scan")
-#add_thrust_test("trivial_sequence") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
+add_thrust_test("trivial_sequence")
add_thrust_test("tuple")
add_thrust_test("tuple_algorithms")
add_thrust_test("tuple_reduce")
@@ -211,18 +213,17 @@ add_thrust_test("tuple_scan")
add_thrust_test("tuple_sort")
add_thrust_test("tuple_transform")
add_thrust_test("type_traits")
-#add_thrust_test("uninitialized_copy") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-#add_thrust_test("uninitialized_fill") # undefined reference to `thrust::hip_rocprim::reference<int>::operator=(int const&)'
-add_thrust_test("unique_by_key")
+add_thrust_test("uninitialized_copy")
+add_thrust_test("uninitialized_fill")
add_thrust_test("unique")
-#add_thrust_test("unittest_static_assert") # error: cannot use 'throw' in __host__ __device__ function
- # error: no member named 'cudaMemcpyToSymbol' in the global namespace; did you mean 'hipMemcpyToSymbol'?
+add_thrust_test("unique_by_key")
+add_thrust_test("unittest_static_assert")
add_thrust_test("unittest_tester")
-#add_thrust_test("vector") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("vector")
add_thrust_test("vector_allocators")
add_thrust_test("vector_insert")
add_thrust_test("vector_manipulation")
-#add_thrust_test("zip_iterator") # lld: error: undefined hidden symbol: thrust::hip_rocprim::reference<int>::operator=(int const&)
+add_thrust_test("zip_iterator")
add_thrust_test("zip_iterator_reduce")
add_thrust_test("zip_iterator_reduce_by_key")
add_thrust_test("zip_iterator_scan")

MODIFY
testing/dependencies_aware_policies.cu
testing/dependencies_aware_policies.cu
#include <unittest/unittest.h>
#include <thrust/detail/seq.h>
-#include <thrust/system/cpp/detail/par.h>
+
+#if THRUST_DEVICE_COMPILER == THRUST_DEVICE_COMPILER_HIP
+ #define THRUST_DEVICE_BACKEND hip
+ #define THRUST_DEVICE_BACKEND_DETAIL hip_rocprim
+ #include <thrust/system/hip/detail/par.h>
+#elif THRUST_DEVICE_COMPILER == THRUST_DEVICE_COMPILER_NVCC
+ #define THRUST_DEVICE_BACKEND cuda
+ #define THRUST_DEVICE_BACKEND_DETAIL cuda_cub
#include <thrust/system/cuda/detail/par.h>
+#endif
+
+#include <thrust/system/cpp/detail/par.h>
#include <thrust/system/omp/detail/par.h>
#include <thrust/system/tbb/detail/par.h>
@@ -146,9 +156,9 @@ typedef policy_info<
thrust::system::cpp::detail::execution_policy
> cpp_par_info;
typedef policy_info<
- thrust::system::cuda::detail::par_t,
- thrust::cuda_cub::execute_on_stream_base
-> cuda_par_info;
+ thrust::system::THRUST_DEVICE_BACKEND::detail::par_t,
+ thrust::THRUST_DEVICE_BACKEND_DETAIL::execute_on_stream_base
+> THRUST_DEVICE_BACKEND_par_info;
typedef policy_info<
thrust::system::omp::detail::par_t,
thrust::system::omp::detail::execution_policy
@@ -164,7 +174,7 @@ SimpleUnitTest<
// TODO: uncomment when dependencies are generalized to all backends
// sequential_info,
// cpp_par_info,
- cuda_par_info
+ THRUST_DEVICE_BACKEND_par_info
// omp_par_info,
// tbb_par_info
>

MODIFY
testing/event.cu
testing/event.cu
@@ -58,8 +58,6 @@ void test_event_new_stream()
{
auto e0 = thrust::device_event(thrust::new_stream);
- auto e0_stream = e0.stream().native_handle();
-
ASSERT_EQUAL(true, e0.valid_stream());
ASSERT_NOT_EQUAL_QUIET(nullptr, e0.stream().native_handle());

MODIFY
testing/for_each.cu
testing/for_each.cu
@@ -60,6 +60,7 @@ DECLARE_INTEGRAL_VECTOR_UNITTEST(TestForEachSimple);
template<typename InputIterator, typename Function>
+__host__ __device__
InputIterator for_each(my_system &system, InputIterator first, InputIterator, Function)
{
system.validate_dispatch();
@@ -79,6 +80,7 @@ DECLARE_UNITTEST(TestForEachDispatchExplicit);
template<typename InputIterator, typename Function>
+__host__ __device__
InputIterator for_each(my_tag, InputIterator first, InputIterator, Function)
{
*first = 13;
@@ -126,6 +128,7 @@ DECLARE_INTEGRAL_VECTOR_UNITTEST(TestForEachNSimple);
template<typename InputIterator, typename Size, typename Function>
+__host__ __device__
InputIterator for_each_n(my_system &system, InputIterator first, Size, Function)
{
system.validate_dispatch();
@@ -145,6 +148,7 @@ DECLARE_UNITTEST(TestForEachNDispatchExplicit);
template<typename InputIterator, typename Size, typename Function>
+__host__ __device__
InputIterator for_each_n(my_tag, InputIterator first, Size, Function)
{
*first = 13;

MODIFY
testing/partition_point.cu
testing/partition_point.cu
@@ -66,6 +66,7 @@ DECLARE_INTEGRAL_VECTOR_UNITTEST(TestPartitionPoint);
template<typename ForwardIterator, typename Predicate>
+__host__ __device__
ForwardIterator partition_point(my_system &system,
ForwardIterator first,
ForwardIterator,
@@ -91,6 +92,7 @@ DECLARE_UNITTEST(TestPartitionPointDispatchExplicit);
template<typename ForwardIterator, typename Predicate>
+__host__ __device__
ForwardIterator partition_point(my_tag,
ForwardIterator first,
ForwardIterator,

MODIFY
testing/scan_by_key.cu
testing/scan_by_key.cu
@@ -261,7 +261,7 @@ struct head_flag_predicate
{
template <typename T>
__host__ __device__
- bool operator()(const T&, const T& b) const
+ bool operator()(const T&, const T& b)
{
return b ? false : true;
}

MODIFY
testing/transform.cu
testing/transform.cu
@@ -771,10 +771,15 @@ DECLARE_VARIABLE_UNITTEST(TestTransformIfBinaryToDiscardIterator);
template <typename T>
void TestTransformUnaryCountingIterator()
{
- // GCC 4.4.x has a known failure with auto-vectorization (due to -O3 or -ftree-vectorize) of this test
+ // G++ 4.4.x has a known failure with auto-vectorization (due to -O3 or
+ // -ftree-vectorize) of this test.
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43251
-#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) == 40400
+
+ // ICPC has a known failure with auto-vectorization (due to -O2 or
+ // higher) of this test.
+ // See nvbug 200326708.
KNOWN_FAILURE;
+}
#else
template <typename T>
void TestTransformUnaryCountingIterator()
@@ -793,18 +798,19 @@ void TestTransformUnaryCountingIterator()
thrust::transform(d_first, d_first + n, d_result.begin(), thrust::identity<T>());
ASSERT_EQUAL(h_result, d_result);
-#endif
}
#endif
DECLARE_GENERIC_UNITTEST(TestTransformUnaryCountingIterator);
+#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) == 40400
template <typename T>
void TestTransformBinaryCountingIterator()
{
// GCC 4.4.x has a known failure with auto-vectorization (due to -O3 or -ftree-vectorize) of this test
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43251
-#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) == 40400
+
KNOWN_FAILURE;
+}
#else
template <typename T>
void TestTransformBinaryCountingIterator()
@@ -823,7 +829,6 @@ void TestTransformBinaryCountingIterator()
thrust::transform(d_first, d_first + n, d_first, d_result.begin(), thrust::plus<T>());
ASSERT_EQUAL(h_result, d_result);
-#endif
}
#endif
DECLARE_GENERIC_UNITTEST(TestTransformBinaryCountingIterator);

MODIFY
testing/unittest/runtime_static_assert.h
testing/unittest/runtime_static_assert.h
@@ -24,14 +24,14 @@ namespace unittest
typedef unittest::static_assert_exception ex_t; \
thrust::device_ptr<ex_t> device_ptr = thrust::device_new<ex_t>(); \
ex_t* raw_ptr = thrust::raw_pointer_cast(device_ptr); \
- ::cudaMemcpyToSymbol(unittest::detail::device_exception, &raw_ptr, sizeof(ex_t*)); \
+ ::hipMemcpyToSymbol(unittest::detail::device_exception, &raw_ptr, sizeof(ex_t*)); \
try { X; } catch (ex_t) { triggered = true; } \
if (!triggered) { \
triggered = static_cast<ex_t>(*device_ptr).triggered; \
} \
thrust::device_free(device_ptr); \
raw_ptr = NULL; \
- ::cudaMemcpyToSymbol(unittest::detail::device_exception, &raw_ptr, sizeof(ex_t*)); \
+ ::hipMemcpyToSymbol(unittest::detail::device_exception, &raw_ptr, sizeof(ex_t*)); \
if (!triggered) { unittest::UnitTestFailure f; f << "[" << __FILE__ << ":" << __LINE__ << "] did not trigger a THRUST_STATIC_ASSERT"; throw f; } \
}
@@ -68,7 +68,7 @@ namespace unittest
{
static_assert_exception ex(filename, lineno);
-#if !defined(__CUDA_ARCH__) && !defined(__HIP_DEVICE_COMPILE__)
+#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__)
*detail::device_exception = ex;
#else
throw ex;

MODIFY
thrust/system/hip/detail/adjacent_difference.h
thrust/system/hip/detail/adjacent_difference.h
@@ -169,7 +169,7 @@ namespace __adjacent_difference
{
typename block_load_type::storage_type load;
typename block_store_type::storage_type store;
- input_type last_items[BlockSize];
+ input_type last_items[BlockSize] = {};
} storage;
constexpr unsigned int items_per_block = BlockSize * ItemsPerThread;

Update testing folder