Lines Matching refs:T
144 template <typename T>
146 return fbl::is_same<T, fbl::atomic_char>::value || in IsSameAsSomeBuiltin()
147 fbl::is_same<T, fbl::atomic_schar>::value || in IsSameAsSomeBuiltin()
148 fbl::is_same<T, fbl::atomic_uchar>::value || in IsSameAsSomeBuiltin()
149 fbl::is_same<T, fbl::atomic_short>::value || in IsSameAsSomeBuiltin()
150 fbl::is_same<T, fbl::atomic_ushort>::value || in IsSameAsSomeBuiltin()
151 fbl::is_same<T, fbl::atomic_int>::value || in IsSameAsSomeBuiltin()
152 fbl::is_same<T, fbl::atomic_uint>::value || in IsSameAsSomeBuiltin()
153 fbl::is_same<T, fbl::atomic_long>::value || in IsSameAsSomeBuiltin()
154 fbl::is_same<T, fbl::atomic_ulong>::value || in IsSameAsSomeBuiltin()
155 fbl::is_same<T, fbl::atomic_llong>::value || in IsSameAsSomeBuiltin()
156 fbl::is_same<T, fbl::atomic_ullong>::value || in IsSameAsSomeBuiltin()
157 fbl::is_same<T, fbl::atomic_bool>::value; in IsSameAsSomeBuiltin()
355 template <typename T>
356 using ordinary_op = T (*)(T*, T);
358 template <typename T>
359 using atomic_op = T (*)(fbl::atomic<T>*, T, fbl::memory_order);
361 template <typename T>
362 using volatile_op = T (*)(volatile fbl::atomic<T>*, T, fbl::memory_order);
364 template <typename T>
366 ordinary_op<T> ordinary;
367 atomic_op<T> nonmember_atomic;
368 atomic_op<T> member_atomic;
369 volatile_op<T> nonmember_volatile;
370 volatile_op<T> member_volatile;
373 template <typename T>
374 T test_values[] = {
378 std::numeric_limits<T>::min() / 4,
379 std::numeric_limits<T>::max() / 4,
530 template <typename T>
531 TestCase<T> test_cases[] = {
533 [](T* ptr_to_a, T b) -> T { in __anonac9e3fa60202()
534 T a = *ptr_to_a; in __anonac9e3fa60202()
535 *ptr_to_a = static_cast<T>(a + b); in __anonac9e3fa60202()
538 fbl::atomic_fetch_add<T>,
539 [](fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60302()
542 fbl::atomic_fetch_add<T>,
543 [](volatile fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60402()
548 [](T* ptr_to_a, T b) -> T { in __anonac9e3fa60502()
549 T a = *ptr_to_a; in __anonac9e3fa60502()
550 *ptr_to_a = static_cast<T>(a & b); in __anonac9e3fa60502()
553 fbl::atomic_fetch_and<T>,
554 [](fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60602()
557 fbl::atomic_fetch_and<T>,
558 [](volatile fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60702()
563 [](T* ptr_to_a, T b) -> T { in __anonac9e3fa60802()
564 T a = *ptr_to_a; in __anonac9e3fa60802()
565 *ptr_to_a = static_cast<T>(a | b); in __anonac9e3fa60802()
568 fbl::atomic_fetch_or<T>,
569 [](fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60902()
572 fbl::atomic_fetch_or<T>,
573 [](volatile fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60a02()
578 [](T* ptr_to_a, T b) -> T { in __anonac9e3fa60b02()
579 T a = *ptr_to_a; in __anonac9e3fa60b02()
580 *ptr_to_a = static_cast<T>(a ^ b); in __anonac9e3fa60b02()
583 fbl::atomic_fetch_xor<T>,
584 [](fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60c02()
587 fbl::atomic_fetch_xor<T>,
588 [](volatile fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60d02()
594 template <typename T>
595 TestCase<T> subtraction_test_case = {
596 [](T* ptr_to_a, T b) -> T { in __anonac9e3fa60e02()
597 T a = *ptr_to_a; in __anonac9e3fa60e02()
598 *ptr_to_a = static_cast<T>(a - b); in __anonac9e3fa60e02()
602 [](fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa60f02()
606 [](volatile fbl::atomic<T>* ptr_to_atomic_a, T b, fbl::memory_order order) -> T { in __anonac9e3fa61002()
611 template <typename T>
613 for (const T original_left : test_values<T>) { in math_test()
614 for (T right : test_values<T>) { in math_test()
616 for (auto test_case : test_cases<T>) { in math_test()
618 fbl::atomic<T> atomic_left(original_left); in math_test()
619 T left = original_left; in math_test()
626 fbl::atomic<T> atomic_left(original_left); in math_test()
627 T left = original_left; in math_test()
634 volatile fbl::atomic<T> atomic_left(original_left); in math_test()
635 T left = original_left; in math_test()
642 volatile fbl::atomic<T> atomic_left(original_left); in math_test()
643 T left = original_left; in math_test()
651 if (fbl::is_unsigned<T>::value) { in math_test()
653 fbl::atomic<T> atomic_left(original_left); in math_test()
654 T left = original_left; in math_test()
655 ASSERT_EQ(subtraction_test_case<T>.ordinary(&left, right), in math_test()
656 … subtraction_test_case<T>.member_atomic(&atomic_left, right, order), in math_test()
661 fbl::atomic<T> atomic_left(original_left); in math_test()
662 T left = original_left; in math_test()
663 ASSERT_EQ(subtraction_test_case<T>.ordinary(&left, right), in math_test()
664 … subtraction_test_case<T>.nonmember_atomic(&atomic_left, right, order), in math_test()
669 volatile fbl::atomic<T> atomic_left(original_left); in math_test()
670 T left = original_left; in math_test()
671 ASSERT_EQ(subtraction_test_case<T>.ordinary(&left, right), in math_test()
672 … subtraction_test_case<T>.member_volatile(&atomic_left, right, order), in math_test()
677 volatile fbl::atomic<T> atomic_left(original_left); in math_test()
678 T left = original_left; in math_test()
679 ASSERT_EQ(subtraction_test_case<T>.ordinary(&left, right), in math_test()
680 … subtraction_test_case<T>.nonmember_volatile(&atomic_left, right, order), in math_test()
692 template <typename T>
693 using ordinary_pointer_op = T (*)(T*, ptrdiff_t);
695 template <typename T>
696 using atomic_pointer_op = T (*)(fbl::atomic<T>*, ptrdiff_t, fbl::memory_order);
698 template <typename T>
699 using volatile_pointer_op = T (*)(volatile fbl::atomic<T>*, ptrdiff_t, fbl::memory_order);
701 template <typename T>
703 ordinary_pointer_op<T> ordinary;
704 atomic_pointer_op<T> nonmember_atomic;
705 atomic_pointer_op<T> member_atomic;
706 volatile_pointer_op<T> nonmember_volatile;
707 volatile_pointer_op<T> member_volatile;
710 template <typename T>
711 PointerTestCase<T> pointer_add_test_case = {
712 [](T* ptr_to_a, ptrdiff_t d) -> T { in __anonac9e3fa61102()
713 T a = *ptr_to_a; in __anonac9e3fa61102()
717 [](fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61202()
720 [](fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61302()
723 [](volatile fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61402()
726 [](volatile fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61502()
731 template <typename T>
732 PointerTestCase<T> pointer_sub_test_case = {
733 [](T* ptr_to_a, ptrdiff_t d) -> T { in __anonac9e3fa61602()
734 T a = *ptr_to_a; in __anonac9e3fa61602()
738 [](fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61702()
741 [](fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61802()
744 [](volatile fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61902()
747 [](volatile fbl::atomic<T>* ptr_to_atomic_a, ptrdiff_t d, fbl::memory_order order) -> T { in __anonac9e3fa61a02()
752 template <typename T>
754 static_assert(fbl::is_pointer<T>::value, ""); in pointer_add_test()
756 const auto& test_case = pointer_add_test_case<T>; in pointer_add_test()
757 for (const T original_left : test_values<T>) { in pointer_add_test()
760 fbl::atomic<T> atomic_left(original_left); in pointer_add_test()
761 T left = original_left; in pointer_add_test()
768 fbl::atomic<T> atomic_left(original_left); in pointer_add_test()
769 T left = original_left; in pointer_add_test()
776 volatile fbl::atomic<T> atomic_left(original_left); in pointer_add_test()
777 T left = original_left; in pointer_add_test()
784 volatile fbl::atomic<T> atomic_left(original_left); in pointer_add_test()
785 T left = original_left; in pointer_add_test()
799 template <typename T>
801 static_assert(fbl::is_pointer<T>::value, ""); in pointer_sub_test()
803 const auto& test_case = pointer_sub_test_case<T>; in pointer_sub_test()
804 for (const T original_left : test_values<T>) { in pointer_sub_test()
807 fbl::atomic<T> atomic_left(original_left); in pointer_sub_test()
808 T left = original_left; in pointer_sub_test()
815 fbl::atomic<T> atomic_left(original_left); in pointer_sub_test()
816 T left = original_left; in pointer_sub_test()
823 volatile fbl::atomic<T> atomic_left(original_left); in pointer_sub_test()
824 T left = original_left; in pointer_sub_test()
831 volatile fbl::atomic<T> atomic_left(original_left); in pointer_sub_test()
832 T left = original_left; in pointer_sub_test()
846 template <typename T>
848 fbl::atomic<T> atomic_value; in load_store_test()
850 for (T value : test_values<T>) { in load_store_test()
855 for (T value : test_values<T>) { in load_store_test()
860 volatile fbl::atomic<T> volatile_value; in load_store_test()
862 for (T value : test_values<T>) { in load_store_test()
867 for (T value : test_values<T>) { in load_store_test()
875 template <typename T>
877 T last_value = test_values<T>[0]; in exchange_test()
878 fbl::atomic<T> atomic_value(last_value); in exchange_test()
880 for (T value : test_values<T>) { in exchange_test()
886 last_value = test_values<T>[0]; in exchange_test()
889 for (T value : test_values<T>) { in exchange_test()
895 last_value = test_values<T>[0]; in exchange_test()
896 volatile fbl::atomic<T> volatile_value(last_value); in exchange_test()
898 for (T value : test_values<T>) { in exchange_test()
904 last_value = test_values<T>[0]; in exchange_test()
907 for (T value : test_values<T>) { in exchange_test()
916 template <typename T>
918 bool (*function)(fbl::atomic<T>* atomic_ptr, T* expected, T desired,
923 template <typename T>
924 cas_function<T> cas_functions[] = {
927 {[](fbl::atomic<T>* atomic_ptr, T* expected, T desired,
932 {[](fbl::atomic<T>* atomic_ptr, T* expected, T desired,
939 template <typename T>
941 bool (*function)(volatile fbl::atomic<T>* atomic_ptr, T* expected, T desired,
946 template <typename T>
947 volatile_cas_function<T> volatile_cas_functions[] = {
950 {[](volatile fbl::atomic<T>* atomic_ptr, T* expected, T desired,
955 {[](volatile fbl::atomic<T>* atomic_ptr, T* expected, T desired,
967 template <typename T>
968 T cas_test_values[] = {
1074 template <typename T>
1076 for (auto cas : cas_functions<T>) { in compare_exchange_test()
1081 T actual = cas_test_values<T>[kActual]; in compare_exchange_test()
1082 fbl::atomic<T> atomic_value(actual); in compare_exchange_test()
1083 T expected = cas_test_values<T>[kExpected]; in compare_exchange_test()
1084 T desired = cas_test_values<T>[kDesired]; in compare_exchange_test()
1092 T actual = cas_test_values<T>[kActual]; in compare_exchange_test()
1093 fbl::atomic<T> atomic_value(actual); in compare_exchange_test()
1094 T expected = actual; in compare_exchange_test()
1095 T desired = cas_test_values<T>[kDesired]; in compare_exchange_test()
1108 for (auto cas : volatile_cas_functions<T>) { in compare_exchange_test()
1113 T actual = cas_test_values<T>[kActual]; in compare_exchange_test()
1114 fbl::atomic<T> atomic_value(actual); in compare_exchange_test()
1115 T expected = cas_test_values<T>[kExpected]; in compare_exchange_test()
1116 T desired = cas_test_values<T>[kDesired]; in compare_exchange_test()
1124 T actual = cas_test_values<T>[kActual]; in compare_exchange_test()
1125 fbl::atomic<T> atomic_value(actual); in compare_exchange_test()
1126 T expected = actual; in compare_exchange_test()
1127 T desired = cas_test_values<T>[kDesired]; in compare_exchange_test()