10 #include "gmock/gmock.h"
11 #include "gtest/gtest.h"
13 namespace hardened_unittest {
16 MATCHER(IsZero,
"is zero") {
return arg == 0; }
18 MATCHER(IsAllOnes,
"is all ones") {
20 std::numeric_limits<std::remove_reference_t<decltype(arg)>>::max();
23 TEST(ConstTime, Sltz) {
30 EXPECT_THAT(
ct_sltzw(-42), IsAllOnes());
33 TEST(ConstTime, Slt) {
34 EXPECT_THAT(
ct_sltu32(42, 120), IsAllOnes());
35 EXPECT_THAT(
ct_sltu32(192874, 1231), IsZero());
36 EXPECT_THAT(
ct_sltu32(12121212, 12121212), IsZero());
39 EXPECT_THAT(
ct_sltuw(42, 120), IsAllOnes());
40 EXPECT_THAT(
ct_sltuw(192874, 1231), IsZero());
41 EXPECT_THAT(
ct_sltuw(12121212, 12121212), IsZero());
42 EXPECT_THAT(
ct_sltuw(0, 0), IsZero());
45 TEST(ConstTime, Seqz) {
50 EXPECT_THAT(
ct_seqzw(0), IsAllOnes());
55 TEST(ConstTime, Seq) {
56 EXPECT_THAT(
ct_seq32(42, 120), IsZero());
57 EXPECT_THAT(
ct_seq32(192874, 1231), IsZero());
58 EXPECT_THAT(
ct_seq32(12121212, 12121212), IsAllOnes());
59 EXPECT_THAT(
ct_seq32(0, 0), IsAllOnes());
61 EXPECT_THAT(
ct_seqw(42, 120), IsZero());
62 EXPECT_THAT(
ct_seqw(192874, 1231), IsZero());
63 EXPECT_THAT(
ct_seqw(12121212, 12121212), IsAllOnes());
64 EXPECT_THAT(
ct_seqw(0, 0), IsAllOnes());
67 TEST(ConstTime, Cmov) {
68 EXPECT_EQ(
ct_cmov32(-1, 0xdeadbeef, 0xc0ffee), 0xdeadbeef);
69 EXPECT_EQ(
ct_cmov32(0, 0xdeadbeef, 0xc0ffee), 0xc0ffee);
71 EXPECT_EQ(
ct_cmovw(-1, 0xdeadbeef, 0xc0ffee), 0xdeadbeef);
72 EXPECT_EQ(
ct_cmovw(0, 0xdeadbeef, 0xc0ffee), 0xc0ffee);