diff options
Diffstat (limited to 'plugins/warp/tests')
| -rw-r--r-- | plugins/warp/tests/container.rs | 280 | ||||
| -rw-r--r-- | plugins/warp/tests/determinism.rs | 40 | ||||
| -rw-r--r-- | plugins/warp/tests/matcher.rs | 182 | ||||
| -rw-r--r-- | plugins/warp/tests/processor.rs | 62 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___ctype.obj.snap | 126 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___fptostr.obj.snap | 9 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___mbslen.obj.snap | 39 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___memicmp.obj.snap | 9 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___strnicm.obj.snap | 9 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism___wctype.obj.snap | 117 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism__atof.obj.snap | 390 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism__atoldbl.obj.snap | 192 | ||||
| -rw-r--r-- | plugins/warp/tests/snapshots/determinism__atox.obj.snap | 186 |
13 files changed, 1641 insertions, 0 deletions
diff --git a/plugins/warp/tests/container.rs b/plugins/warp/tests/container.rs new file mode 100644 index 00000000..31b47377 --- /dev/null +++ b/plugins/warp/tests/container.rs @@ -0,0 +1,280 @@ +use std::collections::HashSet; +use std::path::PathBuf; +use std::str::FromStr; +use uuid::Uuid; +use warp::r#type::class::BooleanClass; +use warp::r#type::class::TypeClass::Void; +use warp::r#type::guid::TypeGUID; +use warp::r#type::{ComputedType, Type}; +use warp::signature::function::{Function, FunctionGUID}; +use warp::symbol::{Symbol, SymbolClass}; +use warp::target::Target; +use warp_ninja::container::disk::DiskContainer; +use warp_ninja::container::memory::{MemoryContainer, MemorySource}; +use warp_ninja::container::{Container, ContainerError, SourceId, SourcePath}; + +fn type_0() -> (TypeGUID, Type) { + let ty = Type::builder() + .name("type_0") + .class(BooleanClass::builder().width(1).build()) + .build(); + (TypeGUID::from(&ty), ty) +} + +fn type_1() -> (TypeGUID, Type) { + let ty = Type::builder() + .name("type_1") + .class(BooleanClass::builder().width(4).build()) + .build(); + (TypeGUID::from(&ty), ty) +} + +fn type_2() -> (TypeGUID, Type) { + let ty = Type::builder() + .name("type_2") + .class(BooleanClass::builder().width(8).build()) + .build(); + (TypeGUID::from(&ty), ty) +} + +fn func_0() -> (FunctionGUID, Function) { + let guid = FunctionGUID::from(Uuid::from_str("d4e56ec8-1f2b-4a87-9f2c-bc3f10c4d8e9").unwrap()); + let function = Function { + guid, + symbol: Symbol { + name: "func_0".to_string(), + modifiers: Default::default(), + class: SymbolClass::Function, + }, + // TODO: We might want to give this an actual function type. + ty: Some(Type::builder::<String, _>().class(Void).build()), + constraints: Default::default(), + comments: vec![], + variables: vec![], + }; + (guid, function) +} + +fn func_1() -> (FunctionGUID, Function) { + let guid = FunctionGUID::from(Uuid::from_str("b713c293-463a-5baa-b31b-ed010510d5c0").unwrap()); + let function = Function { + guid, + symbol: Symbol { + name: "func_1".to_string(), + modifiers: Default::default(), + class: SymbolClass::Function, + }, + // TODO: We might want to give this an actual function type. + ty: Some(Type::builder::<String, _>().class(Void).build()), + constraints: Default::default(), + comments: vec![], + variables: vec![], + }; + (guid, function) +} + +#[test] +fn test_sources_with_type_guid() { + let source1 = SourceId::new(); + let source2 = SourceId::new(); + let (guid_1, ty_1) = type_0(); + let (guid_2, ty_2) = type_1(); + + let container = MemoryContainer::new() + .with_source_type(source1, guid_1, ty_1) + .with_source_type(source1, guid_2, ty_2.clone()) + .with_source_type(source2, guid_2, ty_2); + + let result = container + .sources_with_type_guid(&guid_2) + .expect("Failed to get sources"); + // HashSet used for unordered comparison + let result_set: HashSet<_> = result.into_iter().collect(); + let expected_set: HashSet<_> = vec![source1, source2].into_iter().collect(); + assert_eq!(result_set, expected_set); + + let result = container + .sources_with_type_guid(&guid_1) + .expect("Failed to get sources"); + // HashSet used for unordered comparison + let result_set: HashSet<_> = result.into_iter().collect(); + let expected_set: HashSet<_> = vec![source1].into_iter().collect(); + assert_eq!(result_set, expected_set); +} + +#[test] +fn test_sources_with_function_guid() { + let target = Target::default(); + + let source1 = SourceId::new(); + let source2 = SourceId::new(); + let (guid_1, fn_1) = func_0(); + let (guid_2, fn_2) = func_1(); + + let container = MemoryContainer::new() + .with_source_function(source1, guid_1, fn_1) + .with_source_function(source1, guid_2, fn_2.clone()) + .with_source_function(source2, guid_2, fn_2); + + let result = container + .sources_with_function_guid(&target, &guid_2) + .expect("Failed to get sources"); + // HashSet used for unordered comparison + let result_set: HashSet<_> = result.into_iter().collect(); + let expected_set: HashSet<_> = vec![source1, source2].into_iter().collect(); + assert_eq!(result_set, expected_set); + + let result = container + .sources_with_function_guid(&target, &guid_1) + .expect("Failed to get sources"); + assert_eq!(result, vec![source1]); +} + +#[test] +fn test_sources_with_type_guids() { + let source1 = SourceId::new(); + let source2 = SourceId::new(); + let (guid_1, ty_1) = type_0(); + let (guid_2, ty_2) = type_1(); + let (guid_3, ty_3) = type_2(); + + let container = MemoryContainer::new() + .with_source_type(source1, guid_1, ty_1) + .with_source_type(source1, guid_2, ty_2.clone()) + .with_source_type(source2, guid_2, ty_2) + .with_source_type(source2, guid_3, ty_3); + + let result = container + .sources_with_type_guids(&[guid_2.clone(), guid_3.clone()]) + .expect("Failed to get sources"); + assert_eq!(result.len(), 2); + assert!(result.get(&guid_2).unwrap().contains(&source1)); + assert!(result.get(&guid_2).unwrap().contains(&source2)); + assert!(result.get(&guid_3).unwrap().contains(&source2)); +} + +#[test] +fn test_add_types() { + let source1 = SourceId::new(); + let source2 = SourceId::new(); + let (guid_1, ty_1) = type_0(); + let (guid_2, ty_2) = type_1(); + let mut container = MemoryContainer::new() + .with_source( + source1, + MemorySource { + writable: false, + ..Default::default() + }, + ) + .with_source_type(source1, guid_1, ty_1.clone()) + .with_source_type(source2, guid_2, ty_2.clone()); + + assert_eq!( + container.add_types(&source1, &[ty_1.clone()]), + Err(ContainerError::SourceNotWritable(source1)), + "Source should not be writable" + ); + assert_eq!( + container.add_types(&source2, &[ty_1.clone()]), + Ok(()), + "Source should be writable" + ); + container + .type_with_guid(&source1, &guid_1) + .expect("Failed to get existing type"); + container + .type_with_guid(&source2, &guid_1) + .expect("Failed to get added type"); + container + .type_with_guid(&source2, &guid_2) + .expect("Failed to get existing type"); +} + +#[test] +fn test_disk_container() { + // We are going to use the OUT_DIR as the disk container path, this might have other artifacts in it + // so it's a good test to make sure that we handle bad files gracefully. + let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR environment variable is not set"); + let out_dir_path: PathBuf = out_dir.parse().expect("Failed to parse OUT_DIR as path"); + + // TODO: Use a temp file for this instead lol. + let added_type_path = out_dir_path.join("added_type.warp"); + // Make sure that we have deleted the previous runs artifacts. + if std::fs::exists(&added_type_path).unwrap() { + std::fs::remove_file(&added_type_path).expect("Failed to remove existing file"); + } + + // Write a simple test to open a file with DiskContainer + let mut container = DiskContainer::new_from_dir(out_dir_path.clone()); + + // Just pass in the default target, there is no target specified in the file. + let target = Target::default(); + + // Test type retrieval. + // Type -> type_10 : 2f6d2876-ec42-5ca1-bee3-f12fe91d7e13 + let type_0 = TypeGUID::from(Uuid::from_str("2f6d2876-ec42-5ca1-bee3-f12fe91d7e13").unwrap()); + let sources: Vec<SourceId> = container + .sources_with_type_guid(&type_0) + .expect("Failed to get sources") + .into_iter() + .collect(); + assert_eq!(sources.len(), 1); + let result_type_0 = container + .type_with_guid(&sources[0], &type_0) + .expect("Failed to get type") + .expect("Type not found"); + assert_eq!(result_type_0.name, Some("type_10".to_string())); + let result_type_guids_0 = container + .type_guids_with_name(&sources[0], "type_10") + .expect("Failed to get type guids"); + assert_eq!(result_type_guids_0.len(), 1); + assert_eq!(result_type_guids_0[0], type_0); + + // Test function retrieval. + // Function -> function_95 : d5da0413-a020-5db8-b838-4d0ea8bd3dcb + let func_0 = + FunctionGUID::from(Uuid::from_str("d5da0413-a020-5db8-b838-4d0ea8bd3dcb").unwrap()); + let func_sources = container + .sources_with_function_guid(&target, &func_0) + .expect("Failed to get sources"); + assert_eq!(func_sources.len(), 1); + let result_func_0 = container + .functions_with_guid(&target, &func_sources[0], &func_0) + .expect("Failed to get functions"); + assert_eq!(result_func_0.len(), 1); + assert_eq!(result_func_0[0].symbol.name, "function_95".to_string()); + + // Test adding a type to an existing disk source. + let mut result_type_0_mut = result_type_0.clone(); + result_type_0_mut.name = Some("added_type".to_string()); + let computed_result_type_0 = ComputedType::new(result_type_0_mut); + container + .add_types(&sources[0], &[computed_result_type_0.ty]) + .expect("Failed to add type"); + let result_type_1 = container + .type_guids_with_name(&sources[0], "added_type") + .expect("Failed to get added type"); + assert_eq!( + result_type_1, + vec![computed_result_type_0.guid], + "Added type was not found in the existing source" + ); + + // Test commiting the updated source. + // NOTE: Because we don't want to modify the file, we are going to change the source path + // before trying to commit it, this is a bit hacky and should not really be done in real code. + let source = container + .sources + .get_mut(&sources[0]) + .expect("Container does not contain the source"); + source.path = SourcePath::new(out_dir_path.join("added_type.warp")); + container + .commit_source(&sources[0]) + .expect("Failed to commit source"); + assert_eq!( + std::fs::exists(&added_type_path).unwrap(), + true, + "File was not created" + ); +} diff --git a/plugins/warp/tests/determinism.rs b/plugins/warp/tests/determinism.rs new file mode 100644 index 00000000..403fff1d --- /dev/null +++ b/plugins/warp/tests/determinism.rs @@ -0,0 +1,40 @@ +//! This tests to make sure the function GUIDs are stable. +use binaryninja::binary_view::BinaryViewExt; +use binaryninja::headless::Session; +use std::collections::BTreeMap; +use std::path::PathBuf; +use warp::signature::function::FunctionGUID; +use warp_ninja::cache::cached_function_guid; + +// These are the target files present in OUT_DIR +// Add the files to fixtures/bin +static TARGET_FILES: [&str; 9] = [ + "_ctype.obj", + "_fptostr.obj", + "_mbslen.obj", + "_memicmp.obj", + "_strnicm.obj", + "_wctype.obj", + "atof.obj", + "atoldbl.obj", + "atox.obj", +]; + +#[test] +fn insta_signatures() { + let session = Session::new().expect("Failed to initialize session"); + let out_dir = env!("OUT_DIR").parse::<PathBuf>().unwrap(); + for file_name in TARGET_FILES { + let path = out_dir.join(file_name); + let view = session.load(&path).expect("Failed to load view"); + let functions: BTreeMap<u64, FunctionGUID> = view + .functions() + .iter() + .map(|f| { + let guid = cached_function_guid(&f, &f.lifted_il().unwrap()); + (f.start(), guid) + }) + .collect(); + insta::assert_debug_snapshot!(file_name, functions); + } +} diff --git a/plugins/warp/tests/matcher.rs b/plugins/warp/tests/matcher.rs new file mode 100644 index 00000000..13e2ce01 --- /dev/null +++ b/plugins/warp/tests/matcher.rs @@ -0,0 +1,182 @@ +use binaryninja::architecture::CoreArchitecture; +use binaryninja::binary_view::{BinaryView, BinaryViewExt}; +use binaryninja::file_metadata::FileMetadata; +use binaryninja::function::Function as BNFunction; +use binaryninja::headless::Session; +use binaryninja::platform::Platform; +use binaryninja::rc::Ref; +use binaryninja::symbol::{Symbol as BNSymbol, SymbolType}; +use binaryninja::types::TypeClass as BNTypeClass; +use std::str::FromStr; +use warp::mock::{mock_constraint, mock_function}; +use warp::r#type::class::{IntegerClass, ReferrerClass, StructureClass, StructureMember}; +use warp::r#type::guid::TypeGUID; +use warp::r#type::Type; +use warp::signature::function::FunctionGUID; +use warp::target::Target; +use warp_ninja::container::memory::MemoryContainer; +use warp_ninja::container::{Container, SourceId}; +use warp_ninja::function_guid; +use warp_ninja::matcher::{Matcher, MatcherSettings}; + +const MOCK_FUNCTION_GUID: &'static str = "02e8690a-bd1e-54df-9a75-5e7bca594c30"; +const MOCK_FUNCTION_BYTES: &[u8] = &[ + // first_function + 0xA1, 0xFA, 0xF8, 0xF0, 0x99, // ; mov eax, [0x99f0f8fa] + 0x83, 0xC0, 0x37, // ; add eax, 55 + 0xC3, // ; ret + // second_function + 0xA1, 0xFA, 0xF8, 0xF0, 0x91, // ; mov eax, [0x91f0f8fa] + 0x83, 0xC0, 0x37, // ; add eax, 55 + 0xC3, // ; ret +]; + +fn create_mock_bn_function(_session: &Session) -> Ref<BNFunction> { + let file = FileMetadata::new(); + let view = + BinaryView::from_data(&file, MOCK_FUNCTION_BYTES).expect("Failed to create mock view"); + let platform = Platform::by_name("x86").unwrap(); + // Add the constraint symbol so that the matcher picks it up, so we can test constraint matching. + let constraint_symbol = + BNSymbol::builder(SymbolType::Function, "second_function", 0x9).create(); + view.define_user_symbol(&constraint_symbol); + let function_symbol = BNSymbol::builder(SymbolType::Function, "first_function", 0x0).create(); + view.define_user_symbol(&function_symbol); + // Define the constraint function. + view.add_user_function_with_platform(0x9, &platform) + .expect("Failed to create constraint function"); + // Actually define the function and return it. + view.add_user_function_with_platform(0x0, &platform) + .expect("Failed to create mock function") +} + +#[test] +fn test_match_function() { + let mut matcher_settings = MatcherSettings::default(); + matcher_settings.trivial_function_len = 0; + let matcher = Matcher::new(matcher_settings); + + // The memory container does not currently reference a target. + let target = Target::default(); + + let func = mock_function(MOCK_FUNCTION_GUID); + let func_guid = func.guid.clone(); + + let source = SourceId::new(); + let memory_container = + MemoryContainer::new().with_source_function(source, func_guid, func.clone()); + + // Create mock binary ninja function. + let session = Session::new().expect("Failed to create session"); + let bn_function = create_mock_bn_function(&session); + + let possible_funcs = memory_container + .functions_with_guid(&target, &source, &func_guid) + .expect("Failed to get functions"); + + // Because there is only a single possible function this should just return that function. + let matched_function = matcher + .match_function_from_constraints(&bn_function, &possible_funcs) + .expect("Failed to match function"); + assert_eq!(matched_function, &func); +} + +#[test] +fn test_match_function_from_constraints() { + let mut matcher_settings = MatcherSettings::default(); + // TODO: This is needed to make the test pass, the functions are "trivial" in length. + matcher_settings.trivial_function_adjacent_allowed = true; + let matcher = Matcher::new(matcher_settings); + let mut function = mock_function("first_function"); + function.guid = FunctionGUID::from_str(MOCK_FUNCTION_GUID).expect("Failed to parse guid"); + let func_guid = function.guid.clone(); + // Add constraint + function + .constraints + .insert(mock_constraint("second_function", Some(0x9))); + + let matched_func_1 = function.clone(); + let mut matched_func_2 = function.clone(); + // Remove the constraint from 2, this means that the first matched_func should match. + matched_func_2.constraints.clear(); + let mut matched_functions = vec![matched_func_1.clone(), matched_func_2]; + + // Create a mock binary ninja function. + let session = Session::new().expect("Failed to create session"); + let bn_function = create_mock_bn_function(&session); + let bn_function_guid = function_guid(&bn_function, &bn_function.lifted_il().unwrap()); + assert_eq!(bn_function_guid, func_guid); + + // We should match on the first as it has the adjacent constraint still. + let matched_0 = matcher + .match_function_from_constraints(&bn_function, &matched_functions) + .expect("Failed to match function"); + assert_eq!(matched_0, &function); + + // Now we want to verify we do not match when the matched function is duplicated. + // NOTE: That in the case of identical functions in a set, we would prune them eagerly, so this is + // NOTE: not really indicative of a real scenario. + matched_functions.push(matched_func_1); + + let matched_1 = matcher.match_function_from_constraints(&bn_function, &matched_functions); + assert_eq!(matched_1, None); +} + +fn create_mock_type() -> Type { + // Build the type, this is quite annoying. + let int_class = IntegerClass::builder().width(64).signed(true).build(); + let int_type = Type::builder() + .name("my_int".to_owned()) + .class(int_class) + .build(); + + let struct_member_0 = StructureMember::builder() + .name("field_0") + .ty(int_type) + .offset(0) + .build(); + let struct_class = StructureClass::builder() + .members(vec![struct_member_0]) + .build(); + + Type::builder() + .name("my_struct") + .class(struct_class) + .build() +} + +#[test] +fn test_add_type_to_view() { + let matcher_settings = MatcherSettings::default(); + let matcher = Matcher::new(matcher_settings); + + // Add a source type that we can reference and pull in from the container. + let struct_type = create_mock_type(); + let struct_type_guid = TypeGUID::from(&struct_type); + let struct_type_name = struct_type.name.clone().expect("Type should have name"); + + let source = SourceId::new(); + let container = MemoryContainer::new().with_source_type(source, struct_type_guid, struct_type); + + let _session = Session::new().expect("Failed to create session"); + let file = FileMetadata::new(); + let view = BinaryView::from_data(&file, &[]).expect("Failed to create view"); + let arch = CoreArchitecture::by_name("x86").expect("Failed to get architecture"); + + // Try and add a NTR to the view, this should also add the referenced struct type. + let ref_class = ReferrerClass::builder() + .name(struct_type_name) + .guid(struct_type_guid) + .build(); + let ref_type = Type::builder().name("my_ref").class(ref_class).build(); + matcher.add_type_to_view(&container, &source, &view, &arch, &ref_type); + + println!("{:#?}", view.types().to_vec()); + + // Verify the type was added to the view. + let found_type = view + .type_by_name("my_struct") + .expect("Failed to find added type"); + // Make sure we actually added it as a structure type. + assert_eq!(found_type.type_class(), BNTypeClass::StructureTypeClass); +} diff --git a/plugins/warp/tests/processor.rs b/plugins/warp/tests/processor.rs new file mode 100644 index 00000000..12749779 --- /dev/null +++ b/plugins/warp/tests/processor.rs @@ -0,0 +1,62 @@ +use std::path::PathBuf; +use tempdir::TempDir; +use warp_ninja::processor::WarpFileProcessor; + +// These are the target files present in OUT_DIR +// Add the files to fixtures/bin +static BIN_TARGET_FILES: [&str; 9] = [ + "_ctype.obj", + "_fptostr.obj", + "_mbslen.obj", + "_memicmp.obj", + "_strnicm.obj", + "_wctype.obj", + "atof.obj", + "atoldbl.obj", + "atox.obj", +]; + +#[test] +fn test_processor() { + let out_dir = env!("OUT_DIR").parse::<PathBuf>().unwrap(); + let _headless_session = + binaryninja::headless::Session::new().expect("Failed to initialize session"); + + let processor = WarpFileProcessor::new(); + + // All files should process and not error. + for file_name in BIN_TARGET_FILES { + let path = out_dir.join(file_name); + processor.process(path).unwrap(); + } + + // We should be able to process a warp file. + let warp_path = out_dir.join("random.warp"); + processor.process(warp_path).unwrap(); +} + +#[test] +fn test_caching() { + let out_dir = env!("OUT_DIR").parse::<PathBuf>().unwrap(); + let cache_dir = TempDir::new("tmp_cache").unwrap(); + let _headless_session = + binaryninja::headless::Session::new().expect("Failed to initialize session"); + + let processor = WarpFileProcessor::new().with_cache_path(cache_dir.path().to_path_buf()); + + // Go through files, this should cache the databases. + for file_name in BIN_TARGET_FILES { + let path = out_dir.join(file_name); + processor.process(path).unwrap(); + } + + // Verify the databases were saved to the cache. + let mut cached_paths = Vec::new(); + for entry in std::fs::read_dir(cache_dir.path()).expect("Failed to read cache dir") { + let entry = entry.expect("Failed to read cache dir entry"); + let path = entry.path(); + assert!(path.is_file()); + cached_paths.push(path); + } + assert_eq!(BIN_TARGET_FILES.len(), cached_paths.len()); +} diff --git a/plugins/warp/tests/snapshots/determinism___ctype.obj.snap b/plugins/warp/tests/snapshots/determinism___ctype.obj.snap new file mode 100644 index 00000000..a0ef5ea0 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___ctype.obj.snap @@ -0,0 +1,126 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 181712: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 182032: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 182720: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 183072: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 183376: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 183712: FunctionGUID { + guid: 53b484f3-751a-505d-beae-acc9d69c261d, + }, + 184032: FunctionGUID { + guid: 88d9b26b-3884-58d6-b164-435d8d888e5c, + }, + 184400: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 184736: FunctionGUID { + guid: 7f0e055b-1e83-5f7b-a1fd-6a0a3d0b74f5, + }, + 185040: FunctionGUID { + guid: c7bd1444-8f5c-5bc6-87c3-48f010b00455, + }, + 185376: FunctionGUID { + guid: 18cfce71-47bc-5595-89cb-06e0563b211d, + }, + 185712: FunctionGUID { + guid: 8ff1fc25-6912-5772-8fa3-19e1b996aea7, + }, + 186000: FunctionGUID { + guid: 5b7f41e9-de1e-558c-ac7d-888acca3a76c, + }, + 186352: FunctionGUID { + guid: cdb3f650-974f-5686-b81f-10b6544680f4, + }, + 186784: FunctionGUID { + guid: 9e30f7d4-0a31-50cf-93f8-490a9e8c300b, + }, + 187216: FunctionGUID { + guid: 0df54a49-5267-52f7-9665-70a8e66ad0dd, + }, + 187664: FunctionGUID { + guid: 43a8c54b-dd4f-5334-ae00-218cb758ad4c, + }, + 188096: FunctionGUID { + guid: 5b7cc78f-3b2f-5b82-9726-37c26ad087b4, + }, + 188512: FunctionGUID { + guid: 7cae2466-6b19-5fff-869e-9a9717043df4, + }, + 188864: FunctionGUID { + guid: 7cae2466-6b19-5fff-869e-9a9717043df4, + }, + 189216: FunctionGUID { + guid: 1b6aa5a3-ac7f-542d-a0ab-bae8f142d8d8, + }, + 189632: FunctionGUID { + guid: 951d5c60-d457-5b62-98e7-ade4a37d7cbe, + }, + 190064: FunctionGUID { + guid: a7acb567-eb98-53e4-a843-5c60a8c59f19, + }, + 190480: FunctionGUID { + guid: d5456209-db22-53a1-906d-1ecb3254ab2d, + }, + 190912: FunctionGUID { + guid: bc4d18a4-96d5-5322-ba99-fcee83648701, + }, + 191328: FunctionGUID { + guid: ec40932b-8293-5ffb-9d31-04c282b6530d, + }, + 191744: FunctionGUID { + guid: 15d686e8-3e80-5632-9ce7-17c3510f8238, + }, + 192160: FunctionGUID { + guid: faedbe75-8451-525b-83da-7a57ec96166e, + }, + 192592: FunctionGUID { + guid: 06ff982d-b167-5dce-9689-71a631820da6, + }, + 192944: FunctionGUID { + guid: 3b992cd7-1721-5f30-b59c-84ea682be808, + }, + 193296: FunctionGUID { + guid: 6db530d1-8ea4-568e-a089-c61164851f04, + }, + 193680: FunctionGUID { + guid: 95bf9d56-3b11-515f-960f-07abf69aed95, + }, + 194032: FunctionGUID { + guid: cacf9fe4-7518-5b22-ae3a-ab775dea4c9a, + }, + 194384: FunctionGUID { + guid: 00c71b63-3039-5aa3-94f7-1737530239d9, + }, + 194736: FunctionGUID { + guid: 33e6bc5f-eeb6-5a07-810e-f04a2dba36cf, + }, + 195088: FunctionGUID { + guid: d344f254-4903-581d-ad93-713c9ff2be2e, + }, + 195440: FunctionGUID { + guid: 3ba4d0cb-9c07-5904-aafe-34e051b89be5, + }, + 195792: FunctionGUID { + guid: b8b2746b-20aa-5ad2-bcfd-ab5448d952eb, + }, + 196144: FunctionGUID { + guid: ae6f9d26-872c-5b6e-925e-40c0ec95c702, + }, + 196496: FunctionGUID { + guid: 0d6d3685-7a8a-5d1c-8b7a-fe14871218ff, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism___fptostr.obj.snap b/plugins/warp/tests/snapshots/determinism___fptostr.obj.snap new file mode 100644 index 00000000..717dc070 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___fptostr.obj.snap @@ -0,0 +1,9 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 180832: FunctionGUID { + guid: 9d4dba66-7106-5215-8e64-a47279f67dfe, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism___mbslen.obj.snap b/plugins/warp/tests/snapshots/determinism___mbslen.obj.snap new file mode 100644 index 00000000..848666d9 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___mbslen.obj.snap @@ -0,0 +1,39 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 178448: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 178768: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 179456: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 179808: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 180112: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 180448: FunctionGUID { + guid: 6b0d368e-83d9-55fc-9683-5812e651a49b, + }, + 181632: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 181968: FunctionGUID { + guid: f034945d-32e2-5d86-8a86-3761cc54f419, + }, + 182352: FunctionGUID { + guid: 6a7eb6dd-be3e-50dd-ae91-cea8f3eb4f06, + }, + 182688: FunctionGUID { + guid: bfaf2f0a-d92d-5ef7-879d-86eb0ca01257, + }, + 183024: FunctionGUID { + guid: f552d8ee-3064-50ed-af18-4e60f095c9ea, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism___memicmp.obj.snap b/plugins/warp/tests/snapshots/determinism___memicmp.obj.snap new file mode 100644 index 00000000..3c9b0358 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___memicmp.obj.snap @@ -0,0 +1,9 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 65728: FunctionGUID { + guid: cf6e80f2-69aa-5757-a06f-fb2e4866ab14, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism___strnicm.obj.snap b/plugins/warp/tests/snapshots/determinism___strnicm.obj.snap new file mode 100644 index 00000000..4a118098 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___strnicm.obj.snap @@ -0,0 +1,9 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 65728: FunctionGUID { + guid: 7c350a2d-2282-5625-943e-009f317b8d2c, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism___wctype.obj.snap b/plugins/warp/tests/snapshots/determinism___wctype.obj.snap new file mode 100644 index 00000000..3da522a5 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism___wctype.obj.snap @@ -0,0 +1,117 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 181536: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 181856: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 182544: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 182896: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 183200: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 183536: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 183872: FunctionGUID { + guid: 1b434f0e-26b8-539b-9679-33d96a683190, + }, + 184208: FunctionGUID { + guid: b3723a76-a709-510c-9d93-97dc42b163a3, + }, + 184544: FunctionGUID { + guid: 576f40fd-30a0-53af-8102-7e1b5298d38a, + }, + 184960: FunctionGUID { + guid: 33ce8a60-e3fa-5941-9ca6-09707bb1f579, + }, + 185280: FunctionGUID { + guid: b2339a04-7dcf-5791-b74e-806220d37f56, + }, + 185600: FunctionGUID { + guid: b08dcc9b-b766-56e0-a9af-1d24cc6c6574, + }, + 185952: FunctionGUID { + guid: 1e34d278-fd31-5cdf-98dc-395cb29419a7, + }, + 186272: FunctionGUID { + guid: 1b434f0e-26b8-539b-9679-33d96a683190, + }, + 186624: FunctionGUID { + guid: b3723a76-a709-510c-9d93-97dc42b163a3, + }, + 186976: FunctionGUID { + guid: eed08c42-3616-5c27-82ad-719db5cce36e, + }, + 187296: FunctionGUID { + guid: 23ba7382-bd48-5d47-a1f0-79ad5db87730, + }, + 187616: FunctionGUID { + guid: 90cb6aa0-f402-5874-ae2d-e10752ad6462, + }, + 187936: FunctionGUID { + guid: 75b0aba8-582a-5085-abbb-cebf55d2498d, + }, + 188256: FunctionGUID { + guid: cc259c7e-0ada-5680-8ad7-b077d60bd2a1, + }, + 188576: FunctionGUID { + guid: 607a10c5-8943-5dec-b888-f5210f08b311, + }, + 188896: FunctionGUID { + guid: f6535880-21d4-5272-b2c0-5e63cbc208e7, + }, + 189216: FunctionGUID { + guid: 9dd8ec46-e680-5fbe-b28b-30505b505fa3, + }, + 189552: FunctionGUID { + guid: b098f8a1-ecdd-5938-8da3-bb37935c6b7e, + }, + 189856: FunctionGUID { + guid: 33ce8a60-e3fa-5941-9ca6-09707bb1f579, + }, + 190160: FunctionGUID { + guid: b2339a04-7dcf-5791-b74e-806220d37f56, + }, + 190464: FunctionGUID { + guid: 6cebba56-9929-5f3d-9dd3-fc56f8e84593, + }, + 190768: FunctionGUID { + guid: b08dcc9b-b766-56e0-a9af-1d24cc6c6574, + }, + 191088: FunctionGUID { + guid: 1e34d278-fd31-5cdf-98dc-395cb29419a7, + }, + 191392: FunctionGUID { + guid: eed08c42-3616-5c27-82ad-719db5cce36e, + }, + 191696: FunctionGUID { + guid: 23ba7382-bd48-5d47-a1f0-79ad5db87730, + }, + 192000: FunctionGUID { + guid: 90cb6aa0-f402-5874-ae2d-e10752ad6462, + }, + 192304: FunctionGUID { + guid: 75b0aba8-582a-5085-abbb-cebf55d2498d, + }, + 192608: FunctionGUID { + guid: cc259c7e-0ada-5680-8ad7-b077d60bd2a1, + }, + 192912: FunctionGUID { + guid: 607a10c5-8943-5dec-b888-f5210f08b311, + }, + 193216: FunctionGUID { + guid: f6535880-21d4-5272-b2c0-5e63cbc208e7, + }, + 193520: FunctionGUID { + guid: 9dd8ec46-e680-5fbe-b28b-30505b505fa3, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism__atof.obj.snap b/plugins/warp/tests/snapshots/determinism__atof.obj.snap new file mode 100644 index 00000000..a4841378 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism__atof.obj.snap @@ -0,0 +1,390 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 234752: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 235072: FunctionGUID { + guid: d8ba616a-1747-587c-9265-cd4e26ae35c8, + }, + 235536: FunctionGUID { + guid: 1b1669c2-4a81-5300-99f7-14cba1cc7b24, + }, + 236016: FunctionGUID { + guid: 72452dc5-da9c-54fc-82de-032aab1780a4, + }, + 236528: FunctionGUID { + guid: 87371a48-38c9-5e0e-81db-5e2d6da49202, + }, + 237088: FunctionGUID { + guid: c74ed160-24fe-50d7-ba1c-9751c4599420, + }, + 237600: FunctionGUID { + guid: 1eee5e05-95ef-5f99-8713-504c2003183c, + }, + 238160: FunctionGUID { + guid: 65be15d9-ef02-58a4-af63-b40ddb3e56b7, + }, + 238672: FunctionGUID { + guid: 3efd6327-6038-53ed-904c-a800bee86d2e, + }, + 239232: FunctionGUID { + guid: 82e98c80-859c-5ab3-83ab-b597fc520a3f, + }, + 239808: FunctionGUID { + guid: c44bdef1-d78a-57ec-bff5-4e7d32ff4337, + }, + 240448: FunctionGUID { + guid: 7cbd1cef-0134-5a29-a8c6-82697f5717fe, + }, + 240960: FunctionGUID { + guid: e4ba95bb-0221-5dbd-9884-13a39c4f9d55, + }, + 241520: FunctionGUID { + guid: 0e6feb85-ff6f-5b86-bd2c-26fb9829241c, + }, + 242464: FunctionGUID { + guid: 0e6feb85-ff6f-5b86-bd2c-26fb9829241c, + }, + 243408: FunctionGUID { + guid: a0c07bfa-a027-5c19-9da4-d2d35d7beb40, + }, + 244208: FunctionGUID { + guid: a0c07bfa-a027-5c19-9da4-d2d35d7beb40, + }, + 245008: FunctionGUID { + guid: 06a9339a-7249-50f3-9c3d-131d3248d560, + }, + 245408: FunctionGUID { + guid: 06a9339a-7249-50f3-9c3d-131d3248d560, + }, + 245808: FunctionGUID { + guid: 06a9339a-7249-50f3-9c3d-131d3248d560, + }, + 246208: FunctionGUID { + guid: 06a9339a-7249-50f3-9c3d-131d3248d560, + }, + 246608: FunctionGUID { + guid: 1de88f85-a19c-5454-9122-ddc80f7509b4, + }, + 246992: FunctionGUID { + guid: 1de88f85-a19c-5454-9122-ddc80f7509b4, + }, + 247376: FunctionGUID { + guid: ce28e080-0609-5bcd-abe1-2a6e57c91f83, + }, + 248672: FunctionGUID { + guid: ce28e080-0609-5bcd-abe1-2a6e57c91f83, + }, + 249968: FunctionGUID { + guid: ce28e080-0609-5bcd-abe1-2a6e57c91f83, + }, + 251264: FunctionGUID { + guid: 41fd6d24-0f8b-5848-9873-65b98bd370ab, + }, + 255600: FunctionGUID { + guid: 89f0e45b-c1f6-5aeb-94a8-26e72bb66e6c, + }, + 259968: FunctionGUID { + guid: 4f645f3c-3e89-5b5d-a185-9f1a25e94ed2, + }, + 261152: FunctionGUID { + guid: 4b60a419-4ad1-5808-b41f-d341868c9234, + }, + 262352: FunctionGUID { + guid: 7c43c697-22ef-57a9-a43a-2214e627749d, + }, + 263792: FunctionGUID { + guid: cfa4374b-0fc7-575d-9ba1-4a37d2de0406, + }, + 265248: FunctionGUID { + guid: 45770948-1c56-5b24-bd38-f5a559ae8d22, + }, + 265792: FunctionGUID { + guid: 45770948-1c56-5b24-bd38-f5a559ae8d22, + }, + 266336: FunctionGUID { + guid: cf4808fe-2fea-517d-8f85-f88ddc96cc78, + }, + 266880: FunctionGUID { + guid: cf4808fe-2fea-517d-8f85-f88ddc96cc78, + }, + 267424: FunctionGUID { + guid: 86ab6ab4-45e5-5c08-9a47-05344ea503ab, + }, + 268912: FunctionGUID { + guid: 86ab6ab4-45e5-5c08-9a47-05344ea503ab, + }, + 270400: FunctionGUID { + guid: 364c5864-0cd1-5527-8ca0-2378d5b4c0a5, + }, + 271040: FunctionGUID { + guid: a5b947d4-a7e0-5072-86b3-240474c16595, + }, + 271696: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 272128: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 272560: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 272992: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 273424: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 273856: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 274288: FunctionGUID { + guid: a482559e-6a69-505e-b692-147deeced692, + }, + 274720: FunctionGUID { + guid: a482559e-6a69-505e-b692-147deeced692, + }, + 275152: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 275840: FunctionGUID { + guid: bbb9b018-a0cd-5f98-b941-367f8707434d, + }, + 276224: FunctionGUID { + guid: 879b1d59-7301-5cb7-911e-db05292bee8f, + }, + 276592: FunctionGUID { + guid: b9111cf4-dcff-52a5-8755-2dedea6d5c72, + }, + 277040: FunctionGUID { + guid: 2833f544-9acb-552d-aa4b-df7d51dbab64, + }, + 277488: FunctionGUID { + guid: 7995ca73-04fe-5b30-9e88-1e69197007c1, + }, + 277872: FunctionGUID { + guid: 7995ca73-04fe-5b30-9e88-1e69197007c1, + }, + 278256: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 278608: FunctionGUID { + guid: bbb9b018-a0cd-5f98-b941-367f8707434d, + }, + 279008: FunctionGUID { + guid: 0c7b078d-dafb-5be7-8b10-a25b1e691b33, + }, + 279536: FunctionGUID { + guid: 40358a63-7e16-52da-9270-434c7d444b10, + }, + 279952: FunctionGUID { + guid: 40358a63-7e16-52da-9270-434c7d444b10, + }, + 280368: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 280784: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 281200: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 281616: FunctionGUID { + guid: 40358a63-7e16-52da-9270-434c7d444b10, + }, + 282032: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 282336: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 282672: FunctionGUID { + guid: 3eb2a4c5-84f5-5687-92a0-35ef66c8b746, + }, + 283472: FunctionGUID { + guid: 5b55a8c8-1d3a-5825-a0d9-917f434e07af, + }, + 284352: FunctionGUID { + guid: f3d57592-4cb1-5356-9591-1f9327c58565, + }, + 284768: FunctionGUID { + guid: fb20fa7c-c796-58e4-a2f9-7a128baaf5b1, + }, + 285216: FunctionGUID { + guid: 1c037c1e-9af1-59af-b19e-122fdf885148, + }, + 285712: FunctionGUID { + guid: 4345609a-e619-5f33-84ca-7cc1ccdfa2d0, + }, + 286208: FunctionGUID { + guid: c71f4559-f0af-54dc-a224-e1f341311988, + }, + 286688: FunctionGUID { + guid: 479b6feb-0dff-5c33-8f30-fd0c563b9abc, + }, + 288432: FunctionGUID { + guid: 7d4d1429-5fef-5c8b-9074-93e9d97ab57e, + }, + 290768: FunctionGUID { + guid: c71f4559-f0af-54dc-a224-e1f341311988, + }, + 291232: FunctionGUID { + guid: 9a9e3287-e407-5526-885b-1b5ee78a5300, + }, + 291600: FunctionGUID { + guid: 84429ba2-9f72-585f-8cda-31e8ef4983fd, + }, + 291984: FunctionGUID { + guid: 07c4bac9-cf7d-5e00-833d-d23ba44c07d9, + }, + 292384: FunctionGUID { + guid: 4f0bdeb9-691c-52f8-8541-6c834f3fbe64, + }, + 296016: FunctionGUID { + guid: ecca9a9d-1722-5344-b68f-54f4527c0d78, + }, + 296912: FunctionGUID { + guid: ed23805d-3729-590d-83a3-3b0803a56870, + }, + 297280: FunctionGUID { + guid: 410b1cab-55ff-5931-a894-54842e56bee2, + }, + 297648: FunctionGUID { + guid: 11592e15-a2a6-51b3-bda2-534cc0434df0, + }, + 303056: FunctionGUID { + guid: 3c38a678-9c4e-527a-b543-3075b345d532, + }, + 303392: FunctionGUID { + guid: a603d813-2b33-567d-80c8-06e31562a400, + }, + 303744: FunctionGUID { + guid: 56c82b1f-380c-52fe-ae70-a39962e5ffdc, + }, + 304096: FunctionGUID { + guid: eefbc8a9-f4f1-5725-9a4f-9dcd04ea3478, + }, + 304528: FunctionGUID { + guid: 1b969932-96ce-5a6f-b91c-82e5f7b7f33d, + }, + 304848: FunctionGUID { + guid: a23505e4-e7cd-5543-897c-46b97c1eaef3, + }, + 305216: FunctionGUID { + guid: 9ef21651-3eaf-5940-8e72-104bda834e85, + }, + 305568: FunctionGUID { + guid: 6c01cd47-89a2-59f3-ac6a-cd7806fb8f79, + }, + 306128: FunctionGUID { + guid: d72f40b9-0557-5695-aa4d-468515ec4b8e, + }, + 306464: FunctionGUID { + guid: 3c38a678-9c4e-527a-b543-3075b345d532, + }, + 306816: FunctionGUID { + guid: e480dd82-0b7d-5c75-ac67-ba8c0bb755cb, + }, + 307168: FunctionGUID { + guid: e1b1e1df-fdb9-59d6-b966-5b7f926b5649, + }, + 309232: FunctionGUID { + guid: f37337a6-4cf0-55b4-a0da-25a15e3d9bcb, + }, + 309968: FunctionGUID { + guid: b0aca296-adc3-5b46-a6b1-e82ef2100ead, + }, + 310352: FunctionGUID { + guid: db957206-4cca-5631-893d-1d3dc500c804, + }, + 311760: FunctionGUID { + guid: adadfe23-cb3f-5c9f-ae8d-1dd2fd922367, + }, + 312416: FunctionGUID { + guid: dd480d6b-04f7-5fb2-a7b2-236e1d78b2b0, + }, + 312784: FunctionGUID { + guid: 5779439c-a22f-5d33-8868-4e1832ad49e9, + }, + 313216: FunctionGUID { + guid: 0916139e-a5db-51c8-be24-2c6fb20a9e3a, + }, + 313696: FunctionGUID { + guid: ccbd9943-6b24-59d8-ae4d-3ee868a2729c, + }, + 314064: FunctionGUID { + guid: ccbd9943-6b24-59d8-ae4d-3ee868a2729c, + }, + 314432: FunctionGUID { + guid: 669a32f2-f1e9-5b38-98aa-9eb8431ebc4e, + }, + 315360: FunctionGUID { + guid: 02d864ef-80bc-5265-b78f-0e42815a4d1d, + }, + 315696: FunctionGUID { + guid: 02d864ef-80bc-5265-b78f-0e42815a4d1d, + }, + 316032: FunctionGUID { + guid: 8dca0c9d-bdb7-56a1-9832-431aec16a68f, + }, + 318192: FunctionGUID { + guid: 9e4c3806-b291-569c-a687-0bcaa48e248b, + }, + 318960: FunctionGUID { + guid: 4ba8a311-60f3-57d4-a17a-c0cc93f5c2a4, + }, + 319616: FunctionGUID { + guid: 31a8e73e-74fe-5a33-b0ab-aa1b136e021d, + }, + 320288: FunctionGUID { + guid: c3842e85-b9f2-54d5-b353-e9bb2a0b1203, + }, + 320912: FunctionGUID { + guid: c3842e85-b9f2-54d5-b353-e9bb2a0b1203, + }, + 321536: FunctionGUID { + guid: 8e490dee-4a47-5582-bb8d-0b502f4d70ba, + }, + 322800: FunctionGUID { + guid: 88d9b26b-3884-58d6-b164-435d8d888e5c, + }, + 323168: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 323504: FunctionGUID { + guid: bfaf2f0a-d92d-5ef7-879d-86eb0ca01257, + }, + 323824: FunctionGUID { + guid: e8290b3d-cf56-5c1b-8315-abce0f135559, + }, + 324176: FunctionGUID { + guid: 53b484f3-751a-505d-beae-acc9d69c261d, + }, + 324496: FunctionGUID { + guid: bfaf2f0a-d92d-5ef7-879d-86eb0ca01257, + }, + 324816: FunctionGUID { + guid: e8290b3d-cf56-5c1b-8315-abce0f135559, + }, + 325168: FunctionGUID { + guid: 5b7f41e9-de1e-558c-ac7d-888acca3a76c, + }, + 325520: FunctionGUID { + guid: 43a8c54b-dd4f-5334-ae00-218cb758ad4c, + }, + 325952: FunctionGUID { + guid: b098f8a1-ecdd-5938-8da3-bb37935c6b7e, + }, + 326256: FunctionGUID { + guid: 53b484f3-751a-505d-beae-acc9d69c261d, + }, + 326576: FunctionGUID { + guid: b098f8a1-ecdd-5938-8da3-bb37935c6b7e, + }, + 326880: FunctionGUID { + guid: f37cf37b-b19d-5575-b2c7-a6604d3faa69, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism__atoldbl.obj.snap b/plugins/warp/tests/snapshots/determinism__atoldbl.obj.snap new file mode 100644 index 00000000..2ff5221d --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism__atoldbl.obj.snap @@ -0,0 +1,192 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 223424: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 223744: FunctionGUID { + guid: c5717076-f595-525b-8db8-ca79496236ce, + }, + 224800: FunctionGUID { + guid: c5717076-f595-525b-8db8-ca79496236ce, + }, + 225856: FunctionGUID { + guid: 1de88f85-a19c-5454-9122-ddc80f7509b4, + }, + 226240: FunctionGUID { + guid: c5766cb0-afbc-5701-ad2f-23d980f4bc15, + }, + 226720: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 227024: FunctionGUID { + guid: ce28e080-0609-5bcd-abe1-2a6e57c91f83, + }, + 228320: FunctionGUID { + guid: 41fd6d24-0f8b-5848-9873-65b98bd370ab, + }, + 232656: FunctionGUID { + guid: 4f645f3c-3e89-5b5d-a185-9f1a25e94ed2, + }, + 233840: FunctionGUID { + guid: 7c43c697-22ef-57a9-a43a-2214e627749d, + }, + 235280: FunctionGUID { + guid: 45770948-1c56-5b24-bd38-f5a559ae8d22, + }, + 235824: FunctionGUID { + guid: cf4808fe-2fea-517d-8f85-f88ddc96cc78, + }, + 236368: FunctionGUID { + guid: 86ab6ab4-45e5-5c08-9a47-05344ea503ab, + }, + 237872: FunctionGUID { + guid: 364c5864-0cd1-5527-8ca0-2378d5b4c0a5, + }, + 238512: FunctionGUID { + guid: 9891b84c-000b-529a-8c5b-d762120eff9d, + }, + 239136: FunctionGUID { + guid: 61d32a04-c077-5985-b241-c326dd5b1864, + }, + 239760: FunctionGUID { + guid: 48551d5f-2e1f-557b-85a3-a122d3ce07cf, + }, + 240384: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 240816: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 241248: FunctionGUID { + guid: a707a2d3-c7d2-5b93-97c9-1db77d8ccfe5, + }, + 241680: FunctionGUID { + guid: a482559e-6a69-505e-b692-147deeced692, + }, + 242112: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 242800: FunctionGUID { + guid: 7995ca73-04fe-5b30-9e88-1e69197007c1, + }, + 243184: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 243536: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 243952: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 244368: FunctionGUID { + guid: 8c736b66-b63f-5000-a060-2e60a1b8952a, + }, + 244784: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 245088: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 245424: FunctionGUID { + guid: a030f6f1-e29b-5e4a-8f83-56e6c6c51c15, + }, + 245952: FunctionGUID { + guid: b9e4b6b0-47c3-54ca-9a01-56916ea0db8e, + }, + 246352: FunctionGUID { + guid: b64bd893-5369-5ab2-a869-5f12d3fe313e, + }, + 246768: FunctionGUID { + guid: 6763e6c5-c15f-5eed-9dc9-e0c73284bb59, + }, + 247248: FunctionGUID { + guid: f489ca06-a1f3-5993-80ed-368eff1b7766, + }, + 247728: FunctionGUID { + guid: e12a9f6c-c7cc-573d-b488-e617331aedd9, + }, + 248208: FunctionGUID { + guid: 1556466b-b8ff-5131-b8f3-ce53b21e973b, + }, + 248672: FunctionGUID { + guid: 73674636-a0a6-503a-bda7-55fc27f1bb58, + }, + 249680: FunctionGUID { + guid: 9676fc90-ecba-595b-8d24-5df4e66ac683, + }, + 250048: FunctionGUID { + guid: 3c83a5f5-215d-5d25-97c8-ffe65f73907c, + }, + 250416: FunctionGUID { + guid: 4c636a77-6420-5996-95de-d3c1497d60b7, + }, + 251088: FunctionGUID { + guid: a603d813-2b33-567d-80c8-06e31562a400, + }, + 251440: FunctionGUID { + guid: 22c32840-7bb0-5d80-858c-55dd04553db0, + }, + 252064: FunctionGUID { + guid: eefbc8a9-f4f1-5725-9a4f-9dcd04ea3478, + }, + 252496: FunctionGUID { + guid: a23505e4-e7cd-5543-897c-46b97c1eaef3, + }, + 252864: FunctionGUID { + guid: 8ccf8b37-65c5-525a-b96a-64f26d711c75, + }, + 253424: FunctionGUID { + guid: f9a15815-d271-5c30-893a-239acdb42d21, + }, + 255936: FunctionGUID { + guid: 7a4eafb9-4b86-5aac-b64f-af5d85be4a39, + }, + 256768: FunctionGUID { + guid: 0e4df1e2-2b70-5087-8518-d9cbbe62e048, + }, + 257264: FunctionGUID { + guid: 5779439c-a22f-5d33-8868-4e1832ad49e9, + }, + 257696: FunctionGUID { + guid: ccbd9943-6b24-59d8-ae4d-3ee868a2729c, + }, + 258064: FunctionGUID { + guid: bae57993-863a-5c22-b8bb-92b862148af3, + }, + 258864: FunctionGUID { + guid: 02d864ef-80bc-5265-b78f-0e42815a4d1d, + }, + 259200: FunctionGUID { + guid: 6ef93fa8-909e-596c-9454-74b89e8cabb7, + }, + 259648: FunctionGUID { + guid: a45d9322-0d45-5dc9-b17b-32b843416c4b, + }, + 260000: FunctionGUID { + guid: 4ba8a311-60f3-57d4-a17a-c0cc93f5c2a4, + }, + 260656: FunctionGUID { + guid: c3842e85-b9f2-54d5-b353-e9bb2a0b1203, + }, + 261280: FunctionGUID { + guid: 88d9b26b-3884-58d6-b164-435d8d888e5c, + }, + 261648: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 261984: FunctionGUID { + guid: bfaf2f0a-d92d-5ef7-879d-86eb0ca01257, + }, + 262304: FunctionGUID { + guid: f25e7750-c61c-5ed8-a43d-959c3ba3a5b4, + }, + 262976: FunctionGUID { + guid: 5b7f41e9-de1e-558c-ac7d-888acca3a76c, + }, + 263328: FunctionGUID { + guid: 43a8c54b-dd4f-5334-ae00-218cb758ad4c, + }, +} diff --git a/plugins/warp/tests/snapshots/determinism__atox.obj.snap b/plugins/warp/tests/snapshots/determinism__atox.obj.snap new file mode 100644 index 00000000..57e4e2e9 --- /dev/null +++ b/plugins/warp/tests/snapshots/determinism__atox.obj.snap @@ -0,0 +1,186 @@ +--- +source: plugins/warp/tests/determinism.rs +expression: functions +--- +{ + 220944: FunctionGUID { + guid: 29690354-fa27-54d1-a8be-18535b19b1c3, + }, + 221264: FunctionGUID { + guid: 39d556f9-435a-5105-b56c-6558ddc63fc0, + }, + 221760: FunctionGUID { + guid: 46eae5e0-61e2-5316-9e4d-030dd2240567, + }, + 222304: FunctionGUID { + guid: 1de88f85-a19c-5454-9122-ddc80f7509b4, + }, + 222688: FunctionGUID { + guid: 1de88f85-a19c-5454-9122-ddc80f7509b4, + }, + 223072: FunctionGUID { + guid: 067d6811-472a-5e4a-b65f-3760df0b7bd5, + }, + 225616: FunctionGUID { + guid: 33717d5d-a15f-5c10-bc4a-d85cce963aca, + }, + 228160: FunctionGUID { + guid: 65cb411a-0ae9-546f-9293-3abaa3fd1c31, + }, + 230912: FunctionGUID { + guid: 0244fa6b-6425-5aa9-ad87-2378cc4992e7, + }, + 233680: FunctionGUID { + guid: 3f9f8782-0b8c-5843-8b1d-831a1ef9b024, + }, + 234128: FunctionGUID { + guid: 3f9f8782-0b8c-5843-8b1d-831a1ef9b024, + }, + 234592: FunctionGUID { + guid: 3f9f8782-0b8c-5843-8b1d-831a1ef9b024, + }, + 235056: FunctionGUID { + guid: 3f9f8782-0b8c-5843-8b1d-831a1ef9b024, + }, + 235520: FunctionGUID { + guid: a482559e-6a69-505e-b692-147deeced692, + }, + 235952: FunctionGUID { + guid: a482559e-6a69-505e-b692-147deeced692, + }, + 236384: FunctionGUID { + guid: 1e794537-6289-59e7-bef9-0c72f3989db8, + }, + 237072: FunctionGUID { + guid: 7995ca73-04fe-5b30-9e88-1e69197007c1, + }, + 237456: FunctionGUID { + guid: 7995ca73-04fe-5b30-9e88-1e69197007c1, + }, + 237840: FunctionGUID { + guid: 6abe3fc2-6d29-5fde-a31e-bb8249db6bf9, + }, + 238192: FunctionGUID { + guid: 13b16f81-0c6f-5aee-ad9f-0d142658cf18, + }, + 238496: FunctionGUID { + guid: 8a2b7bda-5fdb-5ba3-888b-20d5b8d7b2cd, + }, + 238832: FunctionGUID { + guid: a603d813-2b33-567d-80c8-06e31562a400, + }, + 239184: FunctionGUID { + guid: 56c82b1f-380c-52fe-ae70-a39962e5ffdc, + }, + 239536: FunctionGUID { + guid: a23505e4-e7cd-5543-897c-46b97c1eaef3, + }, + 239904: FunctionGUID { + guid: 9ef21651-3eaf-5940-8e72-104bda834e85, + }, + 240256: FunctionGUID { + guid: c66dd704-899b-5d58-9d4a-136063f5f552, + }, + 240560: FunctionGUID { + guid: 283e5e36-a239-5f0c-8937-f48a4b1d86e0, + }, + 240864: FunctionGUID { + guid: a8a9d162-b637-5ce6-82f8-a8ac0fb740dc, + }, + 241168: FunctionGUID { + guid: f674b84a-7a05-5ca0-aac4-5b5598683087, + }, + 241472: FunctionGUID { + guid: 5779439c-a22f-5d33-8868-4e1832ad49e9, + }, + 241904: FunctionGUID { + guid: 0916139e-a5db-51c8-be24-2c6fb20a9e3a, + }, + 242384: FunctionGUID { + guid: ccbd9943-6b24-59d8-ae4d-3ee868a2729c, + }, + 242752: FunctionGUID { + guid: ccbd9943-6b24-59d8-ae4d-3ee868a2729c, + }, + 243120: FunctionGUID { + guid: 02d864ef-80bc-5265-b78f-0e42815a4d1d, + }, + 243456: FunctionGUID { + guid: 02d864ef-80bc-5265-b78f-0e42815a4d1d, + }, + 243792: FunctionGUID { + guid: 4ba8a311-60f3-57d4-a17a-c0cc93f5c2a4, + }, + 244448: FunctionGUID { + guid: 31a8e73e-74fe-5a33-b0ab-aa1b136e021d, + }, + 245120: FunctionGUID { + guid: c3842e85-b9f2-54d5-b353-e9bb2a0b1203, + }, + 245744: FunctionGUID { + guid: c3842e85-b9f2-54d5-b353-e9bb2a0b1203, + }, + 246368: FunctionGUID { + guid: 8e490dee-4a47-5582-bb8d-0b502f4d70ba, + }, + 247632: FunctionGUID { + guid: 88d9b26b-3884-58d6-b164-435d8d888e5c, + }, + 248000: FunctionGUID { + guid: 3cc2e827-b707-5c9d-82e9-d76ac3abc904, + }, + 248336: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 248640: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 248976: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 249296: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 249616: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 249936: FunctionGUID { + guid: 5b7f41e9-de1e-558c-ac7d-888acca3a76c, + }, + 250288: FunctionGUID { + guid: 43a8c54b-dd4f-5334-ae00-218cb758ad4c, + }, + 250720: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 251024: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 251328: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 251664: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 251984: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 252288: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 252608: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 252912: FunctionGUID { + guid: 580affd8-2657-50b2-9b65-3327422894de, + }, + 253232: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 253536: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, + 253840: FunctionGUID { + guid: bdf90a04-d375-59b1-8a92-b962b3f914ae, + }, +} |
