65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
|
|
#include <gtest/gtest.h>
|
|||
|
|
|
|||
|
|
#include "dpf.hpp"
|
|||
|
|
|
|||
|
|
#include <cstdint>
|
|||
|
|
#include <limits>
|
|||
|
|
#include <random>
|
|||
|
|
|
|||
|
|
TEST(ConstrainedCmp, LemmaAdjacentPairs)
|
|||
|
|
{
|
|||
|
|
// |x0 − x1| = 1 ⇒ local_ccmp = 1{x0 < x1}.
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(0, 1), 1u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(1, 0), 0u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(2, 3), 1u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(3, 2), 0u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(100, 101), 1u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(101, 100), 0u);
|
|||
|
|
// Control-bit pairs used by arith leaf open (t0 ⊕ t1 = 1).
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(0, 1), 1u); // g = t1
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(1, 0), 0u); // g = t1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TEST(ConstrainedCmp, RandomAdjacentBatch)
|
|||
|
|
{
|
|||
|
|
std::mt19937_64 rng{0xC0FFEEULL};
|
|||
|
|
std::uniform_int_distribution<std::uint64_t> dist(0, (1ull << 40) - 2);
|
|||
|
|
for (int i = 0; i < 256; ++i)
|
|||
|
|
{
|
|||
|
|
const std::uint64_t a = dist(rng);
|
|||
|
|
const std::uint64_t b = a + 1;
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(a, b), 1u) << a << " < " << b;
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(b, a), 0u) << b << " > " << a;
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp_int(a, b), 1u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp_int(b, a), 0u);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TEST(ConstrainedCmp, PartyTermsMatchTheAndInputs)
|
|||
|
|
{
|
|||
|
|
uint8_t z0 = 9, z1 = 9, l = 9;
|
|||
|
|
dpf::detail::ccmp_party_terms(0b10, 0, z0, z1, l);
|
|||
|
|
EXPECT_EQ(l, 0u);
|
|||
|
|
EXPECT_EQ(z0, 1u);
|
|||
|
|
EXPECT_EQ(z1, 1u);
|
|||
|
|
dpf::detail::ccmp_party_terms(0b11, 1, z0, z1, l);
|
|||
|
|
EXPECT_EQ(l, 1u);
|
|||
|
|
EXPECT_EQ(z0, 1u);
|
|||
|
|
EXPECT_EQ(z1, static_cast<uint8_t>(1u ^ 1u ^ 1u));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TEST(ConstrainedCmp, AdjacentAtTheTopOfUint64)
|
|||
|
|
{
|
|||
|
|
const std::uint64_t top = std::numeric_limits<std::uint64_t>::max();
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(top - 1, top), 1u);
|
|||
|
|
EXPECT_EQ(dpf::local_ccmp(top, top - 1), 0u);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TEST(ConstrainedCmp, ProtocolHook)
|
|||
|
|
{
|
|||
|
|
dpf::detail::urandom_pad_rng pads{};
|
|||
|
|
dpf::local_cw_protocol<dpf::detail::urandom_pad_rng> proto{pads};
|
|||
|
|
EXPECT_EQ(proto.open_ccmp(0, 1), 1u);
|
|||
|
|
EXPECT_EQ(proto.open_ccmp(1, 0), 0u);
|
|||
|
|
}
|