Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: base/numerics/safe_numerics_unittest.cc

Issue 2589973003: Revert of Improve saturated_cast performance (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/numerics/safe_conversions_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <limits> 8 #include <limits>
9 #include <type_traits> 9 #include <type_traits>
10 10
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 664
665 const CheckedNumeric<Dst> checked_dst; 665 const CheckedNumeric<Dst> checked_dst;
666 TEST_EXPECTED_VALUE(1, checked_dst + static_cast<Src>(1)); 666 TEST_EXPECTED_VALUE(1, checked_dst + static_cast<Src>(1));
667 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::max()); 667 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::max());
668 TEST_EXPECTED_FAILURE(checked_dst + static_cast<Src>(-1)); 668 TEST_EXPECTED_FAILURE(checked_dst + static_cast<Src>(-1));
669 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::lowest()); 669 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::lowest());
670 670
671 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::max()); 671 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::max());
672 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(1)); 672 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(1));
673 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, static_cast<Src>(-1)); 673 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, static_cast<Src>(-1));
674
675 // Additional saturation tests.
676 EXPECT_EQ(DstLimits::max(), saturated_cast<Dst>(SrcLimits::max()));
677 EXPECT_EQ(DstLimits::lowest(), saturated_cast<Dst>(SrcLimits::lowest()));
678
679 if (SrcLimits::is_iec559) { 674 if (SrcLimits::is_iec559) {
680 EXPECT_EQ(Dst(0), saturated_cast<Dst>(SrcLimits::quiet_NaN()));
681
682 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, SrcLimits::max() * -1); 675 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, SrcLimits::max() * -1);
683 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::infinity()); 676 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::infinity());
684 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, SrcLimits::infinity() * -1); 677 TEST_EXPECTED_RANGE(RANGE_UNDERFLOW, SrcLimits::infinity() * -1);
685 TEST_EXPECTED_RANGE(RANGE_INVALID, SrcLimits::quiet_NaN()); 678 TEST_EXPECTED_RANGE(RANGE_INVALID, SrcLimits::quiet_NaN());
686 if (DstLimits::is_integer) { 679 if (DstLimits::is_integer) {
687 if (SrcLimits::digits < DstLimits::digits) { 680 if (SrcLimits::digits < DstLimits::digits) {
688 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, 681 TEST_EXPECTED_RANGE(RANGE_OVERFLOW,
689 static_cast<Src>(DstLimits::max())); 682 static_cast<Src>(DstLimits::max()));
690 } else { 683 } else {
691 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(DstLimits::max())); 684 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(DstLimits::max()));
(...skipping 22 matching lines...) Expand all
714 TestStrictComparison<Dst, Src>(); 707 TestStrictComparison<Dst, Src>();
715 708
716 const CheckedNumeric<Dst> checked_dst; 709 const CheckedNumeric<Dst> checked_dst;
717 TEST_EXPECTED_VALUE(1, checked_dst + static_cast<Src>(1)); 710 TEST_EXPECTED_VALUE(1, checked_dst + static_cast<Src>(1));
718 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::max()); 711 TEST_EXPECTED_FAILURE(checked_dst + SrcLimits::max());
719 TEST_EXPECTED_VALUE(SrcLimits::lowest(), checked_dst + SrcLimits::lowest()); 712 TEST_EXPECTED_VALUE(SrcLimits::lowest(), checked_dst + SrcLimits::lowest());
720 713
721 TEST_EXPECTED_RANGE(RANGE_VALID, SrcLimits::lowest()); 714 TEST_EXPECTED_RANGE(RANGE_VALID, SrcLimits::lowest());
722 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::max()); 715 TEST_EXPECTED_RANGE(RANGE_OVERFLOW, SrcLimits::max());
723 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(1)); 716 TEST_EXPECTED_RANGE(RANGE_VALID, static_cast<Src>(1));
724
725 // Additional saturation tests.
726 EXPECT_EQ(DstLimits::max(), saturated_cast<Dst>(SrcLimits::max()));
727 EXPECT_EQ(Dst(0), saturated_cast<Dst>(SrcLimits::lowest()));
728 } 717 }
729 }; 718 };
730 719
731 // Helper macro to wrap displaying the conversion types and line numbers 720 // Helper macro to wrap displaying the conversion types and line numbers
732 #define TEST_NUMERIC_CONVERSION(d, s, t) \ 721 #define TEST_NUMERIC_CONVERSION(d, s, t) \
733 TestNumericConversion<d, s, t>::Test(#d, #s, __LINE__) 722 TestNumericConversion<d, s, t>::Test(#d, #s, __LINE__)
734 723
735 TEST(SafeNumerics, IntMinOperations) { 724 TEST(SafeNumerics, IntMinOperations) {
736 TEST_NUMERIC_CONVERSION(int8_t, int8_t, SIGN_PRESERVING_VALUE_PRESERVING); 725 TEST_NUMERIC_CONVERSION(int8_t, int8_t, SIGN_PRESERVING_VALUE_PRESERVING);
737 TEST_NUMERIC_CONVERSION(uint8_t, uint8_t, SIGN_PRESERVING_VALUE_PRESERVING); 726 TEST_NUMERIC_CONVERSION(uint8_t, uint8_t, SIGN_PRESERVING_VALUE_PRESERVING);
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 EXPECT_EQ(static_cast<decltype(d)::type>(-.5), d); 1094 EXPECT_EQ(static_cast<decltype(d)::type>(-.5), d);
1106 auto e = CheckMod(MakeCheckedNum(20), 3).ValueOrDie(); 1095 auto e = CheckMod(MakeCheckedNum(20), 3).ValueOrDie();
1107 EXPECT_EQ(static_cast<decltype(e)::type>(2), e); 1096 EXPECT_EQ(static_cast<decltype(e)::type>(2), e);
1108 auto f = CheckLsh(1, MakeCheckedNum(2)).ValueOrDie(); 1097 auto f = CheckLsh(1, MakeCheckedNum(2)).ValueOrDie();
1109 EXPECT_EQ(static_cast<decltype(f)::type>(4), f); 1098 EXPECT_EQ(static_cast<decltype(f)::type>(4), f);
1110 auto g = CheckRsh(4, MakeCheckedNum(2)).ValueOrDie(); 1099 auto g = CheckRsh(4, MakeCheckedNum(2)).ValueOrDie();
1111 EXPECT_EQ(static_cast<decltype(g)::type>(1), g); 1100 EXPECT_EQ(static_cast<decltype(g)::type>(1), g);
1112 auto h = CheckRsh(CheckAdd(1, 1, 1, 1), CheckSub(4, 2)).ValueOrDie(); 1101 auto h = CheckRsh(CheckAdd(1, 1, 1, 1), CheckSub(4, 2)).ValueOrDie();
1113 EXPECT_EQ(static_cast<decltype(h)::type>(1), h); 1102 EXPECT_EQ(static_cast<decltype(h)::type>(1), h);
1114 } 1103 }
OLDNEW
« no previous file with comments | « base/numerics/safe_conversions_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698