`timescale1ns/1ps`include"uvm_macros.svh"importuvm_pkg::*;classfact_common_itemextendsuvm_object;intvalue=42;`uvm_object_utils_begin(fact_common_item)`uvm_field_int(value,UVM_DEFAULT)`uvm_object_utils_endfunctionnew(stringname="item");super.new(name);endfunctionendclass// These existing subclasses use the base registration and supply type names.classfact_type_aextendsfact_common_item;functionnew(stringname="a");super.new(name);endfunctionvirtualfunctionstringget_type_name();return"fact_type_a";endfunctionendclassclassfact_type_bextendsfact_common_item;functionnew(stringname="b");super.new(name);endfunctionvirtualfunctionstringget_type_name();return"fact_type_b";endfunctionendclassmodulecomparer_fact_probe;initialbeginfact_type_alhs=new();fact_type_brhs=new();uvm_comparercmp=new();bitequal,explicit_equal;$display("REVIEW|names_differ|%0d",lhs.get_type_name()!=rhs.get_type_name());$display("REVIEW|same_wrapper|%0d",lhs.get_object_type()==rhs.get_object_type());cmp.check_type=1;equal=lhs.compare(rhs,cmp);$display("REVIEW|check_type|%0d",cmp.check_type);$display("REVIEW|compare_equal|%0d",equal);explicit_equal=(lhs.get_type_name()==rhs.get_type_name())&&lhs.compare(rhs,cmp);$display("REVIEW|explicit_name_check_equal|%0d",explicit_equal);$display("REVIEW|done|1");$finish;endendmodule