diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index a74b92f9d..49ddfd4cd 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -352,6 +352,11 @@ bool RTLIL::Const::operator<(const RTLIL::Const &other) const bool RTLIL::Const::operator ==(const RTLIL::Const &other) const { + if (is_str() && other.is_str()) + return get_str() == other.get_str(); + if (is_bits() && other.is_bits()) + return get_bits() == other.get_bits(); + if (size() != other.size()) return false; diff --git a/tests/unit/kernel/rtlilTest.cc b/tests/unit/kernel/rtlilTest.cc index 99ddf44cc..b2b2e7076 100644 --- a/tests/unit/kernel/rtlilTest.cc +++ b/tests/unit/kernel/rtlilTest.cc @@ -204,6 +204,24 @@ namespace RTLIL { EXPECT_EQ(c, Const(0xe, 4)); } + TEST_F(KernelRtlilTest, ConstEqualStr) { + EXPECT_EQ(Const("abc"), Const("abc")); + EXPECT_NE(Const("abc"), Const("def")); + } + + TEST_F(KernelRtlilTest, ConstEqualBits) { + std::vector v1 = {S0, S1}; + std::vector v2 = {S1, S0}; + EXPECT_EQ(Const(v1), Const(v1)); + EXPECT_NE(Const(v1), Const(v2)); + } + + TEST_F(KernelRtlilTest, ConstEqualStrBits) { + std::vector v1 = {S0, S0, S0, S0, S0, S1, S0, S0}; + EXPECT_EQ(Const(v1), Const(" ")); + EXPECT_NE(Const(v1), Const("a")); + } + class WireRtlVsHdlIndexConversionTest : public KernelRtlilTest, public testing::WithParamInterface>