mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 03:32:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <gtest/gtest.h>
 | |
| #include "kernel/rtlil.h"
 | |
| 
 | |
| YOSYS_NAMESPACE_BEGIN
 | |
| 
 | |
| namespace RTLIL {
 | |
| 
 | |
| 	class KernelRtlilTest : public testing::Test {};
 | |
| 
 | |
| 	TEST_F(KernelRtlilTest, ConstAssignCompare)
 | |
| 	{
 | |
| 		Const c1;
 | |
| 		Const c2;
 | |
| 		c2 = c1;
 | |
| 		Const c3(c2);
 | |
| 		EXPECT_TRUE(c2 == c3);
 | |
| 		EXPECT_FALSE(c2 < c3);
 | |
| 	}
 | |
| 
 | |
| 	TEST_F(KernelRtlilTest, ConstStr) {
 | |
| 		// We have multiple distinct sections since it's annoying
 | |
| 		// to list multiple testcases as friends of Const in kernel/rtlil.h
 | |
| 		{
 | |
| 			std::string foo = "foo";
 | |
| 			Const c1 = foo;
 | |
| 			Const c2;
 | |
| 			c2 = c1;
 | |
| 			Const c3(c2);
 | |
| 			EXPECT_TRUE(c1.is_str());
 | |
| 			EXPECT_TRUE(c2.is_str());
 | |
| 			EXPECT_TRUE(c3.is_str());
 | |
| 		}
 | |
| 
 | |
| 		{
 | |
| 			// A binary constant is bitvec backed
 | |
| 			Const cb1(0, 10);
 | |
| 			Const cb2(1, 10);
 | |
| 			Const cb3(cb2);
 | |
| 			std::vector<bool> v1 {false, true};
 | |
| 			std::vector<State> v2 {State::S0, State::S1};
 | |
| 			Const cb4(v1);
 | |
| 			Const cb5(v2);
 | |
| 			EXPECT_TRUE(cb4 == cb5);
 | |
| 			EXPECT_TRUE(cb1.is_bits());
 | |
| 			EXPECT_TRUE(cb2.is_bits());
 | |
| 			EXPECT_TRUE(cb3.is_bits());
 | |
| 			EXPECT_TRUE(cb4.is_bits());
 | |
| 			EXPECT_TRUE(cb5.is_bits());
 | |
| 			EXPECT_EQ(cb1.size(), 10);
 | |
| 			EXPECT_EQ(cb2.size(), 10);
 | |
| 			EXPECT_EQ(cb3.size(), 10);
 | |
| 		}
 | |
| 
 | |
| 		{
 | |
| 			// A string constructed Const starts off packed
 | |
| 			std::string foo = "foo";
 | |
| 			Const cs1 = foo;
 | |
| 			EXPECT_TRUE(cs1.is_str());
 | |
| 
 | |
| 			// It can be iterated without mutating
 | |
| 			int i = 0;
 | |
| 			for (auto bit : cs1) {
 | |
| 				i += bit;
 | |
| 			}
 | |
| 			EXPECT_EQ(i, 16);
 | |
| 			EXPECT_TRUE(cs1.is_str());
 | |
| 
 | |
| 			// It can be mutated with the bits() view
 | |
| 			// and decays into unpacked
 | |
| 			for (auto& bit : cs1.bits()) {
 | |
| 				bit = State::Sx;
 | |
| 			}
 | |
| 			EXPECT_TRUE(cs1.is_bits());
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| }
 | |
| 
 | |
| YOSYS_NAMESPACE_END
 |