implement Combine Sets Instance Op
This commit is contained in:
parent
5351fe7735
commit
99ec3f703f
@ -231,6 +231,7 @@ namespace Mocha.Core
|
||||
{
|
||||
public static Guid BuildDynamicInstanceOp { get; } = new Guid("{622edf0d-5e3d-49fd-9764-33aa304addf4}");
|
||||
public static Guid FilterByTypeOp { get; } = new Guid("{8344a933-bb49-4d1c-b92a-a044fc9b9611}");
|
||||
public static Guid CombineSetsOp { get; } = new Guid("{a98844a5-ede8-4b4d-a94e-5f6f15db75c0}");
|
||||
}
|
||||
|
||||
[ExportEntities(Prefix = "IDC_", Suffix = null)]
|
||||
@ -498,14 +499,14 @@ namespace Mocha.Core
|
||||
}
|
||||
public static class Languages
|
||||
{
|
||||
public static Guid English { get; } = new Guid ("{68BB6038-A4B5-4EE1-AAE9-326494942062}");
|
||||
public static Guid Spanish { get; } = new Guid ("{6dc357cb-37c3-43ed-ae13-6259fb109213}");
|
||||
public static Guid French { get; } = new Guid ("{6bf0cf09-87c9-4e21-b360-7eb5a1c279de}");
|
||||
public static Guid German { get; } = new Guid ("{c7c1d740-0d3c-493f-ab0b-fe1b42546d0a}");
|
||||
public static Guid Italian { get; } = new Guid ("{cf165170-0680-4a41-8f88-88f34b2b1986}");
|
||||
public static Guid Chinese { get; } = new Guid ("{6f908a9b-7464-4a16-aed9-7eccb8d39032}");
|
||||
public static Guid Japanese { get; } = new Guid ("{1e16de9d-0e49-4a79-b690-4905c46a94cc}");
|
||||
public static Guid Korean { get; } = new Guid ("{d03a795e-906b-49ee-87ea-c1bef4b8ee9a}");
|
||||
public static Guid English { get; } = new Guid("{68BB6038-A4B5-4EE1-AAE9-326494942062}");
|
||||
public static Guid Spanish { get; } = new Guid("{6dc357cb-37c3-43ed-ae13-6259fb109213}");
|
||||
public static Guid French { get; } = new Guid("{6bf0cf09-87c9-4e21-b360-7eb5a1c279de}");
|
||||
public static Guid German { get; } = new Guid("{c7c1d740-0d3c-493f-ab0b-fe1b42546d0a}");
|
||||
public static Guid Italian { get; } = new Guid("{cf165170-0680-4a41-8f88-88f34b2b1986}");
|
||||
public static Guid Chinese { get; } = new Guid("{6f908a9b-7464-4a16-aed9-7eccb8d39032}");
|
||||
public static Guid Japanese { get; } = new Guid("{1e16de9d-0e49-4a79-b690-4905c46a94cc}");
|
||||
public static Guid Korean { get; } = new Guid("{d03a795e-906b-49ee-87ea-c1bef4b8ee9a}");
|
||||
}
|
||||
public static class GroupLayoutOptions
|
||||
{
|
||||
@ -532,6 +533,15 @@ namespace Mocha.Core
|
||||
public static Guid ParentClass { get; } = new Guid("{98da8ac1-1fea-4cb4-a278-0c5460e625fd}");
|
||||
public static Guid DestinationClassForRelationship { get; } = new Guid("{cc6bf015-ea36-4cc5-8855-5047095affee}");
|
||||
public static Guid Set { get; } = new Guid("{40565aa8-892b-4a36-9a8e-54d55d1c6efe}");
|
||||
public static Guid SetA { get; } = new Guid("{6a41b0e4-6089-45f6-8996-901e66d36f53}");
|
||||
public static Guid SetB { get; } = new Guid("{4c7f240f-dd51-451d-afe9-73ba42971214}");
|
||||
}
|
||||
public static class SetFunctions
|
||||
{
|
||||
public static Guid Union { get; } = new Guid("{62f000a2-9b51-44ba-89dc-1d4735eb0015}");
|
||||
public static Guid Intersection { get; } = new Guid("{3445c281-271d-405f-ba7d-65ea1fdff0f0}");
|
||||
public static Guid Complement { get; } = new Guid("{fa69b904-315b-4bb1-80a6-c71708fbfde5}");
|
||||
public static Guid Difference { get; } = new Guid("{ec67f62d-387c-4179-9b03-0d9b70195688}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -462,5 +462,7 @@ namespace Mocha.Core
|
||||
public static Guid Build_Dynamic_Instance_Op__assigns_instance_data_from__Parameter_Assignment { get; } = new Guid("{f5b1f747-fae3-4318-958b-a64f7cdd8b42}");
|
||||
|
||||
public static Guid Filter_By_Type_Op__uses__Class { get; } = new Guid("{2f5fddc8-5ab0-4c59-8a83-536a2ce0a30c}");
|
||||
|
||||
public static Guid Combine_Sets_Op__uses__Set_Function { get; } = new Guid("{b20e54d4-2535-44c0-8c99-0411f27a69df}");
|
||||
}
|
||||
}
|
||||
|
||||
@ -69,6 +69,33 @@ public class InstanceOpMethodImplementation : MethodImplementation
|
||||
|
||||
context.SetWorkData(workSet, list);
|
||||
}
|
||||
else if (oms.IsInstanceOf(op, oms.GetInstance(KnownInstanceGuids.InstanceOpClasses.CombineSetsOp)))
|
||||
{
|
||||
InstanceHandle setFunction = oms.GetRelatedInstance(op, oms.GetInstance(KnownRelationshipGuids.Combine_Sets_Op__uses__Set_Function));
|
||||
InstanceHandle ihSetA = oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
object? oSetA = oms.Evaluate(context, context.GetWorkData(ihSetA), InstanceHandle.Empty);
|
||||
object? oSetB = oms.Evaluate(context, context.GetWorkData(ihSetB), InstanceHandle.Empty);
|
||||
if (oSetA is IEnumerable<InstanceHandle> setA && oSetB is IEnumerable<InstanceHandle> setB)
|
||||
{
|
||||
if (setFunction == oms.GetInstance(KnownInstanceGuids.SetFunctions.Union))
|
||||
{
|
||||
IEnumerable<InstanceHandle> ih = setA.Union(setB);
|
||||
context.SetWorkData(workSet, ih);
|
||||
}
|
||||
else if (setFunction == oms.GetInstance(KnownInstanceGuids.SetFunctions.Intersection))
|
||||
{
|
||||
IEnumerable<InstanceHandle> ih = setA.Intersect(setB);
|
||||
context.SetWorkData(workSet, ih);
|
||||
}
|
||||
else if (setFunction == oms.GetInstance(KnownInstanceGuids.SetFunctions.Difference))
|
||||
{
|
||||
IEnumerable<InstanceHandle> ih = setA.Except(setB);
|
||||
context.SetWorkData(workSet, ih);
|
||||
}
|
||||
}
|
||||
}
|
||||
return workSet;
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,4 +35,11 @@ public class OmsInstanceOpBuilder
|
||||
Oms.AssignRelationship(iop, Oms.GetInstance(KnownRelationshipGuids.Filter_By_Type_Op__uses__Class), usesClass.GetHandle());
|
||||
return new FilterByTypeOp(iop);
|
||||
}
|
||||
|
||||
public CombineSetsOp CreateCombineSetsOp(IInstanceReference setFunction)
|
||||
{
|
||||
InstanceHandle iop = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.InstanceOpClasses.CombineSetsOp));
|
||||
Oms.AssignRelationship(iop, Oms.GetInstance(KnownRelationshipGuids.Combine_Sets_Op__uses__Set_Function), setFunction.GetHandle());
|
||||
return new CombineSetsOp(iop);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
namespace Mocha.Core.Oop.InstanceOps;
|
||||
|
||||
public class CombineSetsOp : InstanceOp
|
||||
{
|
||||
|
||||
public CombineSetsOp(InstanceHandle handle) : base(handle) { }
|
||||
|
||||
}
|
||||
@ -111,6 +111,242 @@ namespace Mocha.Core.Tests.MethodTests
|
||||
Assert.That(data.Count(), Is.EqualTo(2));
|
||||
Assert.That(data.Contains(ihDate1) && data.Contains(ihDate2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CombineSetsOp_Intersection()
|
||||
{
|
||||
InstanceHandle ihSetA = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
InstanceHandle c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
InstanceHandle iA1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle iB1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle[] irSetA = new InstanceHandle[]
|
||||
{
|
||||
iA1,
|
||||
iA2,
|
||||
iA3,
|
||||
iA4,
|
||||
iB4
|
||||
};
|
||||
InstanceHandle[] irSetB = new InstanceHandle[]
|
||||
{
|
||||
iA2,
|
||||
iB1,
|
||||
iB2,
|
||||
iB3,
|
||||
iB4
|
||||
};
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA), irSetA);
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB), irSetB);
|
||||
|
||||
WorkSet workSet = Oms.CreateWorkSet("Test Work Set for Combine Sets");
|
||||
|
||||
InstanceOp combineSetsOp = ((new OmsInstanceOpBuilder(Oms)).CreateCombineSetsOp(Oms.GetInstance(KnownInstanceGuids.SetFunctions.Intersection)));
|
||||
InstanceOpMethod iop = Oms.MethodBuilder.CreateInstanceOpMethod(c_TestClass, "combine", "Set A and Set B", AccessModifier.Public, true, workSet, combineSetsOp);
|
||||
|
||||
InstanceHandle workSet2 = Oms.Execute(context, iop);
|
||||
IEnumerable<InstanceHandle> irSetC = context.GetWorkData<IEnumerable<InstanceHandle>>(workSet);
|
||||
|
||||
Assert.That(irSetC.Count(), Is.EqualTo(2));
|
||||
Assert.That(irSetC.Contains(iA2) && irSetC.Contains(iB4));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void CombineSetsOp_Union()
|
||||
{
|
||||
InstanceHandle ihSetA = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
InstanceHandle c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
InstanceHandle iA1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle iB1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle[] irSetA = new InstanceHandle[]
|
||||
{
|
||||
iA1,
|
||||
iA2,
|
||||
iA3,
|
||||
iA4,
|
||||
iB4
|
||||
};
|
||||
InstanceHandle[] irSetB = new InstanceHandle[]
|
||||
{
|
||||
iA2,
|
||||
iB1,
|
||||
iB2,
|
||||
iB3,
|
||||
iB4
|
||||
};
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA), irSetA);
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB), irSetB);
|
||||
|
||||
WorkSet workSet = Oms.CreateWorkSet("Test Work Set for Combine Sets");
|
||||
|
||||
InstanceOp combineSetsOp = ((new OmsInstanceOpBuilder(Oms)).CreateCombineSetsOp(Oms.GetInstance(KnownInstanceGuids.SetFunctions.Union)));
|
||||
InstanceOpMethod iop = Oms.MethodBuilder.CreateInstanceOpMethod(c_TestClass, "combine", "Set A and Set B", AccessModifier.Public, true, workSet, combineSetsOp);
|
||||
|
||||
InstanceHandle workSet2 = Oms.Execute(context, iop);
|
||||
IEnumerable<InstanceHandle> irSetC = context.GetWorkData<IEnumerable<InstanceHandle>>(workSet);
|
||||
|
||||
Assert.That(irSetC.Count(), Is.EqualTo(8));
|
||||
Assert.That(irSetC.Contains(iA2) && irSetC.Contains(iB4));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void CombineSetsOp_Difference()
|
||||
{
|
||||
InstanceHandle ihSetA = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
InstanceHandle c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
InstanceHandle iA1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iA4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle iB1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle iB4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle[] irSetA = new InstanceHandle[]
|
||||
{
|
||||
iA1,
|
||||
iA2,
|
||||
iA3,
|
||||
iA4,
|
||||
iB4
|
||||
};
|
||||
InstanceHandle[] irSetB = new InstanceHandle[]
|
||||
{
|
||||
iA2,
|
||||
iB1,
|
||||
iB2,
|
||||
iB3,
|
||||
iB4
|
||||
};
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA), irSetA);
|
||||
context.SetWorkData(Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB), irSetB);
|
||||
|
||||
WorkSet workSet = Oms.CreateWorkSet("Test Work Set for Combine Sets");
|
||||
|
||||
InstanceOp combineSetsOp = ((new OmsInstanceOpBuilder(Oms)).CreateCombineSetsOp(Oms.GetInstance(KnownInstanceGuids.SetFunctions.Difference)));
|
||||
InstanceOpMethod iop = Oms.MethodBuilder.CreateInstanceOpMethod(c_TestClass, "combine", "Set A and Set B", AccessModifier.Public, true, workSet, combineSetsOp);
|
||||
|
||||
InstanceHandle workSet2 = Oms.Execute(context, iop);
|
||||
IEnumerable<InstanceHandle> irSetC = context.GetWorkData<IEnumerable<InstanceHandle>>(workSet);
|
||||
|
||||
Assert.That(irSetC.Count(), Is.EqualTo(3));
|
||||
Assert.That(irSetC.Contains(iA1) && irSetC.Contains(iA3) && irSetC.Contains(iA4));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void CombineSetsOp_Union_using_Executables()
|
||||
{
|
||||
InstanceHandle ihSetA = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
InstanceHandle c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
|
||||
InstanceHandle i_TestClass1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle i_TestClass2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
InstanceHandle i_TestClass3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle i_TestClass4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
WorkSet wsTmp = Oms.CreateWorkSet("Temporary Work Set");
|
||||
GetSpecifiedInstancesMethod m1 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_TestClass, "get", "Set A Instances", wsTmp, new InstanceHandle[] { i_TestClass1, i_TestClass2 });
|
||||
ReturnInstanceSetMethodBinding rsmb1 = m1.CreateMethodBinding(Oms);
|
||||
|
||||
GetSpecifiedInstancesMethod m2 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_TestClass, "get", "Set B Instances", wsTmp, new InstanceHandle[] { i_TestClass3, i_TestClass4 });
|
||||
ReturnInstanceSetMethodBinding rsmb2 = m2.CreateMethodBinding(Oms);
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
|
||||
WorkSet workSet = Oms.CreateWorkSet("Test Work Set for Combine Sets");
|
||||
|
||||
InstanceOp combineSetsOp = ((new OmsInstanceOpBuilder(Oms)).CreateCombineSetsOp(Oms.GetInstance(KnownInstanceGuids.SetFunctions.Union)));
|
||||
InstanceOpMethod iop = Oms.MethodBuilder.CreateInstanceOpMethod(c_TestClass, "combine", "Set A and Set B", AccessModifier.Public, true, workSet, combineSetsOp);
|
||||
MethodBinding mb = iop.CreateMethodBinding(Oms, new KeyValuePair<InstanceHandle, object?>[]
|
||||
{
|
||||
new KeyValuePair<InstanceHandle, object?>(ihSetA, rsmb1),
|
||||
new KeyValuePair<InstanceHandle, object?>(ihSetB, rsmb2)
|
||||
});
|
||||
|
||||
InstanceHandle workSet2 = Oms.Execute(context, mb);
|
||||
IEnumerable<InstanceHandle> irSetC = context.GetWorkData<IEnumerable<InstanceHandle>>(workSet);
|
||||
|
||||
Assert.That(irSetC.Count(), Is.EqualTo(4));
|
||||
Assert.That(irSetC.Contains(i_TestClass1) && irSetC.Contains(i_TestClass2) && irSetC.Contains(i_TestClass3) && irSetC.Contains(i_TestClass4));
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Test]
|
||||
public void CombineSetsOp_Difference_using_Executables()
|
||||
{
|
||||
InstanceHandle ihSetA = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetA);
|
||||
InstanceHandle ihSetB = Oms.GetInstance(KnownInstanceGuids.WorkSets.SetB);
|
||||
|
||||
InstanceHandle c_TestClass = Oms.GetInstance(TEST_CLASS_GUID);
|
||||
|
||||
InstanceHandle i_TestClass1 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle i_TestClass2 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle i_TestClass3 = Oms.CreateInstanceOf(c_TestClass);
|
||||
InstanceHandle i_TestClass4 = Oms.CreateInstanceOf(c_TestClass);
|
||||
|
||||
WorkSet wsTmp = Oms.CreateWorkSet("Temporary Work Set");
|
||||
GetSpecifiedInstancesMethod m1 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_TestClass, "get", "Set A Instances", wsTmp, new InstanceHandle[] { i_TestClass1, i_TestClass2, i_TestClass3 });
|
||||
ReturnInstanceSetMethodBinding rsmb1 = m1.CreateMethodBinding(Oms);
|
||||
|
||||
GetSpecifiedInstancesMethod m2 = Oms.MethodBuilder.CreateGetSpecifiedInstancesMethod(c_TestClass, "get", "Set B Instances", wsTmp, new InstanceHandle[] { i_TestClass3 });
|
||||
ReturnInstanceSetMethodBinding rsmb2 = m2.CreateMethodBinding(Oms);
|
||||
|
||||
OmsContext context = Oms.CreateContext();
|
||||
|
||||
WorkSet workSet = Oms.CreateWorkSet("Test Work Set for Combine Sets");
|
||||
|
||||
InstanceOp combineSetsOp = ((new OmsInstanceOpBuilder(Oms)).CreateCombineSetsOp(Oms.GetInstance(KnownInstanceGuids.SetFunctions.Difference)));
|
||||
InstanceOpMethod iop = Oms.MethodBuilder.CreateInstanceOpMethod(c_TestClass, "combine", "Set A and Set B", AccessModifier.Public, true, workSet, combineSetsOp);
|
||||
MethodBinding mb = iop.CreateMethodBinding(Oms, new KeyValuePair<InstanceHandle, object?>[]
|
||||
{
|
||||
new KeyValuePair<InstanceHandle, object?>(ihSetA, rsmb1),
|
||||
new KeyValuePair<InstanceHandle, object?>(ihSetB, rsmb2)
|
||||
});
|
||||
|
||||
InstanceHandle workSet2 = Oms.Execute(context, mb);
|
||||
IEnumerable<InstanceHandle> irSetC = context.GetWorkData<IEnumerable<InstanceHandle>>(workSet);
|
||||
|
||||
Assert.That(irSetC.Count(), Is.EqualTo(2));
|
||||
Assert.That(irSetC.Contains(i_TestClass1) && irSetC.Contains(i_TestClass2));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user