Simplify child matching by relying on ordering, makes tests fail, needs snapshot changes to BTreeMap

This commit is contained in:
Lucien Greathouse 2019-03-12 16:30:07 -07:00
parent 7ca3670338
commit 007ab077eb
4 changed files with 237 additions and 253 deletions

View file

@ -74,11 +74,15 @@ fn basic_equal(left_tree: &RbxTree, left_id: RbxId, right_tree: &RbxTree, right_
.expect("ID did not exist in right tree");
if left_instance.name != right_instance.name {
return Err(TreeMismatch::new(&left_instance.name, "Name did not match"));
let message = format!("Name did not match ('{}' vs '{}')", left_instance.name, right_instance.name);
return Err(TreeMismatch::new(&left_instance.name, message));
}
if left_instance.class_name != right_instance.class_name {
return Err(TreeMismatch::new(&left_instance.name, "Class name did not match"));
let message = format!("Class name did not match ('{}' vs '{}')", left_instance.class_name, right_instance.class_name);
return Err(TreeMismatch::new(&left_instance.name, message));
}
Ok(())
@ -146,35 +150,15 @@ fn children_equal(left_tree: &RbxTree, left_id: RbxId, right_tree: &RbxTree, rig
return Err(TreeMismatch::new(&left_instance.name, "Instances had different numbers of children"));
}
let mut right_visited = HashSet::new();
for (left_child_id, right_child_id) in left_children.iter().zip(right_children) {
basic_equal(left_tree, *left_child_id, right_tree, *right_child_id)
.map_err(|e| e.add_parent(&left_instance.name))?;
for left_child_id in left_children {
let mut found_match = false;
properties_equal(left_tree, *left_child_id, right_tree, *right_child_id)
.map_err(|e| e.add_parent(&left_instance.name))?;
for right_child_id in right_children {
if right_visited.contains(right_child_id) {
continue;
}
if basic_equal(left_tree, *left_child_id, right_tree, *right_child_id).is_err() {
continue;
}
properties_equal(left_tree, *left_child_id, right_tree, *right_child_id)
.map_err(|e| e.add_parent(&left_instance.name))?;
children_equal(left_tree, *left_child_id, right_tree, *right_child_id)
.map_err(|e| e.add_parent(&left_instance.name))?;
found_match = true;
right_visited.insert(*right_child_id);
}
if !found_match {
let left_child = left_tree.get_instance(*left_child_id).unwrap();
return Err(TreeMismatch::new(&left_child.name, "Had no equal in right tree"));
}
children_equal(left_tree, *left_child_id, right_tree, *right_child_id)
.map_err(|e| e.add_parent(&left_instance.name))?;
}
Ok(())

View file

@ -1,19 +1,6 @@
{
"instances": {
"a44d135b-d022-4893-8079-d921a7ba7077": {
"Name": "foo",
"ClassName": "StringValue",
"Properties": {
"Value": {
"Type": "String",
"Value": "Hello world, from a/foo.txt"
}
},
"Id": "a44d135b-d022-4893-8079-d921a7ba7077",
"Children": [],
"Parent": "c3319126-251e-4743-b0b8-3d58c355883e"
},
"046a1cf5-e720-4647-9161-10998594ca65": {
"daa80612-5a17-4d07-9e4e-baad4d568676": {
"Name": "HttpService",
"ClassName": "HttpService",
"Properties": {
@ -22,67 +9,67 @@
"Value": true
}
},
"Id": "046a1cf5-e720-4647-9161-10998594ca65",
"Id": "daa80612-5a17-4d07-9e4e-baad4d568676",
"Children": [],
"Parent": "2d857fa5-51e8-4c97-9974-b7e1ec795bba"
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"15f73586-bb1b-49c7-b543-c4d05b9f8a60": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "15f73586-bb1b-49c7-b543-c4d05b9f8a60",
"Children": [
"bb3d7bbd-7c90-4838-95e3-693be4daf727",
"c3319126-251e-4743-b0b8-3d58c355883e"
],
"Parent": "2d857fa5-51e8-4c97-9974-b7e1ec795bba"
},
"c3319126-251e-4743-b0b8-3d58c355883e": {
"Name": "Ack",
"ClassName": "Folder",
"Properties": {},
"Id": "c3319126-251e-4743-b0b8-3d58c355883e",
"Children": [
"a44d135b-d022-4893-8079-d921a7ba7077",
"031507bd-e81e-481f-a7af-401566afab0f"
],
"Parent": "15f73586-bb1b-49c7-b543-c4d05b9f8a60"
},
"4162d6bb-732b-4da4-a917-38d267ff9c42": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "4162d6bb-732b-4da4-a917-38d267ff9c42",
"Children": [],
"Parent": "bb3d7bbd-7c90-4838-95e3-693be4daf727"
},
"bb3d7bbd-7c90-4838-95e3-693be4daf727": {
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba": {
"Name": "Bar",
"ClassName": "Folder",
"Properties": {},
"Id": "bb3d7bbd-7c90-4838-95e3-693be4daf727",
"Id": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba",
"Children": [
"4162d6bb-732b-4da4-a917-38d267ff9c42"
"8fca320f-cf3f-4b9f-b232-171533985e7f"
],
"Parent": "15f73586-bb1b-49c7-b543-c4d05b9f8a60"
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"2d857fa5-51e8-4c97-9974-b7e1ec795bba": {
"cc953b08-acb9-4482-9262-be896caaa995": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "cc953b08-acb9-4482-9262-be896caaa995",
"Children": [
"a09f9a76-75b0-463c-88cf-23098326fa3a",
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
],
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"a09f9a76-75b0-463c-88cf-23098326fa3a": {
"Name": "Ack",
"ClassName": "Folder",
"Properties": {},
"Id": "a09f9a76-75b0-463c-88cf-23098326fa3a",
"Children": [
"005fbb30-ff81-4114-9d0a-9f8344ec9096",
"bf13e09c-2405-4537-acdf-5572d58f53bf"
],
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"005fbb30-ff81-4114-9d0a-9f8344ec9096": {
"Name": "foo",
"ClassName": "StringValue",
"Properties": {
"Value": {
"Type": "String",
"Value": "Hello world, from a/foo.txt"
}
},
"Id": "005fbb30-ff81-4114-9d0a-9f8344ec9096",
"Children": [],
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"0c31c54f-ad78-4bd1-9a85-20b16a992147": {
"Name": "multi_partition_game",
"ClassName": "DataModel",
"Properties": {},
"Id": "2d857fa5-51e8-4c97-9974-b7e1ec795bba",
"Id": "0c31c54f-ad78-4bd1-9a85-20b16a992147",
"Children": [
"046a1cf5-e720-4647-9161-10998594ca65",
"15f73586-bb1b-49c7-b543-c4d05b9f8a60"
"cc953b08-acb9-4482-9262-be896caaa995",
"daa80612-5a17-4d07-9e4e-baad4d568676"
],
"Parent": null
},
"031507bd-e81e-481f-a7af-401566afab0f": {
"bf13e09c-2405-4537-acdf-5572d58f53bf": {
"Name": "main",
"ClassName": "ModuleScript",
"Properties": {
@ -91,10 +78,23 @@
"Value": "-- hello, from a/main.lua"
}
},
"Id": "031507bd-e81e-481f-a7af-401566afab0f",
"Id": "bf13e09c-2405-4537-acdf-5572d58f53bf",
"Children": [],
"Parent": "c3319126-251e-4743-b0b8-3d58c355883e"
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"8fca320f-cf3f-4b9f-b232-171533985e7f": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "8fca320f-cf3f-4b9f-b232-171533985e7f",
"Children": [],
"Parent": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
}
},
"root_id": "2d857fa5-51e8-4c97-9974-b7e1ec795bba"
"root_id": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
}

View file

@ -1,63 +1,6 @@
{
"instances": {
"50e71545-7a19-4457-acc7-1e97ae9ece18": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "50e71545-7a19-4457-acc7-1e97ae9ece18",
"Children": [],
"Parent": "9a7e28d7-135d-4b8f-89dd-85bf88416d98"
},
"9b0799cc-fc16-49ce-8ee9-6feeb52ed6da": {
"Name": "added",
"ClassName": "Folder",
"Properties": {},
"Id": "9b0799cc-fc16-49ce-8ee9-6feeb52ed6da",
"Children": [],
"Parent": "6d0894f6-0365-4363-839e-66c953b42aa8"
},
"5bdc78c3-a1a9-47b8-9660-abb01364aa70": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "5bdc78c3-a1a9-47b8-9660-abb01364aa70",
"Children": [
"9a7e28d7-135d-4b8f-89dd-85bf88416d98",
"6d0894f6-0365-4363-839e-66c953b42aa8"
],
"Parent": "57609a96-3c79-4456-9630-4d157a5e1ee7"
},
"675477f2-d101-4d62-bb12-aacb1d1e05b5": {
"Name": "main",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- hello, from a/main.lua"
}
},
"Id": "675477f2-d101-4d62-bb12-aacb1d1e05b5",
"Children": [],
"Parent": "6d0894f6-0365-4363-839e-66c953b42aa8"
},
"6d0894f6-0365-4363-839e-66c953b42aa8": {
"Name": "Ack",
"ClassName": "Folder",
"Properties": {},
"Id": "6d0894f6-0365-4363-839e-66c953b42aa8",
"Children": [
"4ee48ea8-0f0e-4fcf-ade2-196eda2fa05c",
"675477f2-d101-4d62-bb12-aacb1d1e05b5",
"9b0799cc-fc16-49ce-8ee9-6feeb52ed6da"
],
"Parent": "5bdc78c3-a1a9-47b8-9660-abb01364aa70"
},
"c2c90183-dfaa-4ee5-ac31-9d78ae32d3fb": {
"daa80612-5a17-4d07-9e4e-baad4d568676": {
"Name": "HttpService",
"ClassName": "HttpService",
"Properties": {
@ -66,22 +9,52 @@
"Value": true
}
},
"Id": "c2c90183-dfaa-4ee5-ac31-9d78ae32d3fb",
"Id": "daa80612-5a17-4d07-9e4e-baad4d568676",
"Children": [],
"Parent": "57609a96-3c79-4456-9630-4d157a5e1ee7"
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"57609a96-3c79-4456-9630-4d157a5e1ee7": {
"Name": "multi_partition_game",
"ClassName": "DataModel",
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba": {
"Name": "Bar",
"ClassName": "Folder",
"Properties": {},
"Id": "57609a96-3c79-4456-9630-4d157a5e1ee7",
"Id": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba",
"Children": [
"5bdc78c3-a1a9-47b8-9660-abb01364aa70",
"c2c90183-dfaa-4ee5-ac31-9d78ae32d3fb"
"8fca320f-cf3f-4b9f-b232-171533985e7f"
],
"Parent": null
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"4ee48ea8-0f0e-4fcf-ade2-196eda2fa05c": {
"cc953b08-acb9-4482-9262-be896caaa995": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "cc953b08-acb9-4482-9262-be896caaa995",
"Children": [
"a09f9a76-75b0-463c-88cf-23098326fa3a",
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
],
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"257fe82d-8711-4c82-a9f7-7a526ca575a4": {
"Name": "added",
"ClassName": "Folder",
"Properties": {},
"Id": "257fe82d-8711-4c82-a9f7-7a526ca575a4",
"Children": [],
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"a09f9a76-75b0-463c-88cf-23098326fa3a": {
"Name": "Ack",
"ClassName": "Folder",
"Properties": {},
"Id": "a09f9a76-75b0-463c-88cf-23098326fa3a",
"Children": [
"005fbb30-ff81-4114-9d0a-9f8344ec9096",
"bf13e09c-2405-4537-acdf-5572d58f53bf",
"257fe82d-8711-4c82-a9f7-7a526ca575a4"
],
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"005fbb30-ff81-4114-9d0a-9f8344ec9096": {
"Name": "foo",
"ClassName": "StringValue",
"Properties": {
@ -90,20 +63,47 @@
"Value": "Hello world, from a/foo.txt"
}
},
"Id": "4ee48ea8-0f0e-4fcf-ade2-196eda2fa05c",
"Id": "005fbb30-ff81-4114-9d0a-9f8344ec9096",
"Children": [],
"Parent": "6d0894f6-0365-4363-839e-66c953b42aa8"
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"9a7e28d7-135d-4b8f-89dd-85bf88416d98": {
"Name": "Bar",
"ClassName": "Folder",
"0c31c54f-ad78-4bd1-9a85-20b16a992147": {
"Name": "multi_partition_game",
"ClassName": "DataModel",
"Properties": {},
"Id": "9a7e28d7-135d-4b8f-89dd-85bf88416d98",
"Id": "0c31c54f-ad78-4bd1-9a85-20b16a992147",
"Children": [
"50e71545-7a19-4457-acc7-1e97ae9ece18"
"cc953b08-acb9-4482-9262-be896caaa995",
"daa80612-5a17-4d07-9e4e-baad4d568676"
],
"Parent": "5bdc78c3-a1a9-47b8-9660-abb01364aa70"
"Parent": null
},
"bf13e09c-2405-4537-acdf-5572d58f53bf": {
"Name": "main",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- hello, from a/main.lua"
}
},
"Id": "bf13e09c-2405-4537-acdf-5572d58f53bf",
"Children": [],
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"8fca320f-cf3f-4b9f-b232-171533985e7f": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "8fca320f-cf3f-4b9f-b232-171533985e7f",
"Children": [],
"Parent": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
}
},
"root_id": "57609a96-3c79-4456-9630-4d157a5e1ee7"
"root_id": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
}

View file

@ -1,78 +1,6 @@
{
"instances": {
"833f7f8b-7ec3-4f6a-9476-63af9612510a": {
"Name": "foo",
"ClassName": "StringValue",
"Properties": {
"Value": {
"Type": "String",
"Value": "Hello world, from a/foo.txt"
}
},
"Id": "833f7f8b-7ec3-4f6a-9476-63af9612510a",
"Children": [],
"Parent": "ea14bb8b-cc04-4b0c-9aae-02f1447cbda7"
},
"381278fa-4eb9-4110-b64c-3bbdb76a0bd5": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "381278fa-4eb9-4110-b64c-3bbdb76a0bd5",
"Children": [],
"Parent": "74b23f01-582f-4c6b-9f6c-e5c17c41c466"
},
"74b23f01-582f-4c6b-9f6c-e5c17c41c466": {
"Name": "Bar",
"ClassName": "Folder",
"Properties": {},
"Id": "74b23f01-582f-4c6b-9f6c-e5c17c41c466",
"Children": [
"381278fa-4eb9-4110-b64c-3bbdb76a0bd5",
"ce5ccafe-1165-4a3a-afb2-8da27cc123e2"
],
"Parent": "10f2a2c4-b3e4-478d-84d5-a74a71ee8235"
},
"caf1ebc4-af44-4cad-935d-b44a8ca57d32": {
"Name": "multi_partition_game",
"ClassName": "DataModel",
"Properties": {},
"Id": "caf1ebc4-af44-4cad-935d-b44a8ca57d32",
"Children": [
"10f2a2c4-b3e4-478d-84d5-a74a71ee8235",
"b411bf23-4662-4799-a8eb-6afc1bd8888e"
],
"Parent": null
},
"10f2a2c4-b3e4-478d-84d5-a74a71ee8235": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "10f2a2c4-b3e4-478d-84d5-a74a71ee8235",
"Children": [
"74b23f01-582f-4c6b-9f6c-e5c17c41c466",
"ea14bb8b-cc04-4b0c-9aae-02f1447cbda7"
],
"Parent": "caf1ebc4-af44-4cad-935d-b44a8ca57d32"
},
"0de0ab3d-e74a-473b-808a-076febe9d808": {
"Name": "main",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- hello, from a/main.lua"
}
},
"Id": "0de0ab3d-e74a-473b-808a-076febe9d808",
"Children": [],
"Parent": "ea14bb8b-cc04-4b0c-9aae-02f1447cbda7"
},
"b411bf23-4662-4799-a8eb-6afc1bd8888e": {
"daa80612-5a17-4d07-9e4e-baad4d568676": {
"Name": "HttpService",
"ClassName": "HttpService",
"Properties": {
@ -81,29 +9,101 @@
"Value": true
}
},
"Id": "b411bf23-4662-4799-a8eb-6afc1bd8888e",
"Id": "daa80612-5a17-4d07-9e4e-baad4d568676",
"Children": [],
"Parent": "caf1ebc4-af44-4cad-935d-b44a8ca57d32"
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"ea14bb8b-cc04-4b0c-9aae-02f1447cbda7": {
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba": {
"Name": "Bar",
"ClassName": "Folder",
"Properties": {},
"Id": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba",
"Children": [
"8fca320f-cf3f-4b9f-b232-171533985e7f",
"83693370-350c-4f63-ac66-3bf79681c8b1"
],
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"cc953b08-acb9-4482-9262-be896caaa995": {
"Name": "ReplicatedStorage",
"ClassName": "ReplicatedStorage",
"Properties": {},
"Id": "cc953b08-acb9-4482-9262-be896caaa995",
"Children": [
"a09f9a76-75b0-463c-88cf-23098326fa3a",
"1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
],
"Parent": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
},
"a09f9a76-75b0-463c-88cf-23098326fa3a": {
"Name": "Ack",
"ClassName": "Folder",
"Properties": {},
"Id": "ea14bb8b-cc04-4b0c-9aae-02f1447cbda7",
"Id": "a09f9a76-75b0-463c-88cf-23098326fa3a",
"Children": [
"833f7f8b-7ec3-4f6a-9476-63af9612510a",
"0de0ab3d-e74a-473b-808a-076febe9d808"
"005fbb30-ff81-4114-9d0a-9f8344ec9096",
"bf13e09c-2405-4537-acdf-5572d58f53bf"
],
"Parent": "10f2a2c4-b3e4-478d-84d5-a74a71ee8235"
"Parent": "cc953b08-acb9-4482-9262-be896caaa995"
},
"ce5ccafe-1165-4a3a-afb2-8da27cc123e2": {
"83693370-350c-4f63-ac66-3bf79681c8b1": {
"Name": "added",
"ClassName": "Folder",
"Properties": {},
"Id": "ce5ccafe-1165-4a3a-afb2-8da27cc123e2",
"Id": "83693370-350c-4f63-ac66-3bf79681c8b1",
"Children": [],
"Parent": "74b23f01-582f-4c6b-9f6c-e5c17c41c466"
"Parent": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
},
"005fbb30-ff81-4114-9d0a-9f8344ec9096": {
"Name": "foo",
"ClassName": "StringValue",
"Properties": {
"Value": {
"Type": "String",
"Value": "Hello world, from a/foo.txt"
}
},
"Id": "005fbb30-ff81-4114-9d0a-9f8344ec9096",
"Children": [],
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"0c31c54f-ad78-4bd1-9a85-20b16a992147": {
"Name": "multi_partition_game",
"ClassName": "DataModel",
"Properties": {},
"Id": "0c31c54f-ad78-4bd1-9a85-20b16a992147",
"Children": [
"cc953b08-acb9-4482-9262-be896caaa995",
"daa80612-5a17-4d07-9e4e-baad4d568676"
],
"Parent": null
},
"bf13e09c-2405-4537-acdf-5572d58f53bf": {
"Name": "main",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- hello, from a/main.lua"
}
},
"Id": "bf13e09c-2405-4537-acdf-5572d58f53bf",
"Children": [],
"Parent": "a09f9a76-75b0-463c-88cf-23098326fa3a"
},
"8fca320f-cf3f-4b9f-b232-171533985e7f": {
"Name": "something",
"ClassName": "ModuleScript",
"Properties": {
"Source": {
"Type": "String",
"Value": "-- b/something.lua"
}
},
"Id": "8fca320f-cf3f-4b9f-b232-171533985e7f",
"Children": [],
"Parent": "1b9db376-c3b5-406c-8f6d-e2edf7b450ba"
}
},
"root_id": "caf1ebc4-af44-4cad-935d-b44a8ca57d32"
"root_id": "0c31c54f-ad78-4bd1-9a85-20b16a992147"
}