Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions examples/all_checks_example.sv
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
// Example demonstrating all uvmkit_check macros with passing cases
// This example shows successful assertions for each macro type

module tb;

// Example class for object checks
class MyClass;
int value;
function new(int v);
value = v;
endfunction
endclass

// Example enum for enum checks
typedef enum {RED, GREEN, BLUE} color_e;

initial begin
MyClass obj1, obj2;
color_e color1, color2;
string str1, str2;
real r1, r2;

$display("=== uvmkit_check Examples ===\n");

// ========================================
// Basic Checks
// ========================================
$display("--- Basic Checks ---");

// check_true: passes when expression is true
`uvmkit_check_true(1)
`uvmkit_check_true(5 > 3)

// check_false: passes when expression is false
`uvmkit_check_false(0)
`uvmkit_check_false(2 < 1)

// ========================================
// Equality Checks
// ========================================
$display("--- Equality Checks ---");

// check_equals: passes when values are equal
`uvmkit_check_equals(1, 1)
`uvmkit_check_equals(8'hAA, 8'hAA)
`uvmkit_check_equals(1'bx, 1'bx)

// check_not_equals: passes when values are not equal
`uvmkit_check_not_equals(1, 0)
`uvmkit_check_not_equals(8'hAA, 8'h55)
`uvmkit_check_not_equals(1'bx, 1'b0)

// ========================================
// Null Checks
// ========================================
$display("--- Null Checks ---");

obj1 = null;
obj2 = new(42);

// check_null: passes when object is null
`uvmkit_check_null(obj1)

// check_not_null: passes when object is not null
`uvmkit_check_not_null(obj2)

// ========================================
// Object Identity Checks
// ========================================
$display("--- Object Identity Checks ---");

obj1 = new(10);
obj2 = obj1; // Same object reference

// check_same: passes when objects are the same reference
`uvmkit_check_same(obj1, obj2)

obj2 = new(10); // Different object

// check_not_same: passes when objects are different references
`uvmkit_check_not_same(obj1, obj2)

// ========================================
// Real Number Checks
// ========================================
$display("--- Real Number Checks ---");

r1 = 3.14159;
r2 = 3.14160;

// check_equals_real: passes when values are within delta
`uvmkit_check_equals_real(r1, r2, 0.001)
`uvmkit_check_equals_real(1.0, 1.0, 0.0)

// check_not_equals_real: passes when values differ by more than delta
`uvmkit_check_not_equals_real(r1, r2, 0.00001)
`uvmkit_check_not_equals_real(1.0, 2.0, 0.5)

// ========================================
// Enum Checks
// ========================================
$display("--- Enum Checks ---");

color1 = RED;
color2 = RED;

// check_equals_enum: passes when enum values are equal
`uvmkit_check_equals_enum(color_e, color1, color2)
`uvmkit_check_equals_enum(color_e, RED, RED)

color2 = BLUE;

// check_not_equals_enum: passes when enum values differ
`uvmkit_check_not_equals_enum(color_e, color1, color2)
`uvmkit_check_not_equals_enum(color_e, RED, BLUE)

// ========================================
// String Checks
// ========================================
$display("--- String Checks ---");

str1 = "hello";
str2 = "hello";

// check_equals_string: passes when strings are equal
`uvmkit_check_equals_string(str1, str2)
`uvmkit_check_equals_string("test", "test")

str2 = "world";

// check_not_equals_string: passes when strings differ
`uvmkit_check_not_equals_string(str1, str2)
`uvmkit_check_not_equals_string("hello", "world")

// ========================================
// Checks with Custom Messages
// ========================================
$display("--- Checks with Custom Messages ---");

`uvmkit_check_true(1, "This check should pass")
`uvmkit_check_equals(42, 42, "Answer to life")
`uvmkit_check_equals_string("pass", "pass", "String comparison")

$finish;
end

endmodule
49 changes: 49 additions & 0 deletions src/uvmkit_check.sv
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,55 @@
end \
end

`define uvmkit_check_equals_enum(enum_t, expected, actual, msg="") \
begin \
enum_t _expected; \
enum_t _actual; \
_expected = expected; \
_actual = actual; \
if (_expected !== _actual) begin \
`uvmkit_error_msg_fmt("uvmkit_check_equals_enum", $sformatf("Expected '%s' to equal '%s', but %s !== %s", `"expected`", `"actual`", _expected.name(), _actual.name()), msg) \
end \
end

`define uvmkit_check_not_equals_enum(enum_t, expected, actual, msg="") \
begin \
enum_t _expected; \
enum_t _actual; \
_expected = expected; \
_actual = actual; \
if (_expected === _actual) begin \
`uvmkit_error_msg_fmt("uvmkit_check_not_equals_enum", $sformatf("Expected '%s' to not equal '%s', but both are %s", `"expected`", `"actual`", _expected.name()), msg) \
end \
end


// String-specific comparison macros (work with all simulators including Verilator)
`define uvmkit_check_equals_string(a, b, msg="") \
begin \
string _a_str; \
string _b_str; \
automatic logic _exp_result; \
_a_str = (a); \
_b_str = (b); \
_exp_result = _a_str == _b_str; \
if (_exp_result !== 1'b1) begin \
`uvmkit_error_msg_fmt("uvmkit_check_equals_string", $sformatf("Expected strings to be equal:\n Expected: \"%s\"\n Actual: \"%s\"", _a_str, _b_str), msg) \
end \
end

`define uvmkit_check_not_equals_string(a, b, msg="") \
begin \
string _a_str; \
string _b_str; \
automatic logic _exp_result; \
_a_str = (a); \
_b_str = (b); \
_exp_result = _a_str != _b_str; \
if (_exp_result !== 1'b1) begin \
`uvmkit_error_msg_fmt("uvmkit_check_not_equals_string", $sformatf("Expected strings to be different, but both are:\n \"%s\"", _a_str), msg) \
end \
end

// TODO:
// - enum
Expand Down
Loading