Add support for global custom numeric fields.
PiperOrigin-RevId: 495865065 Change-Id: I59ed65e84a0bcaa90220b938ed34fdc26165aa09
This commit is contained in:
committed by
Copybara-Service
parent
516d13d678
commit
f70403d00a
@@ -26,16 +26,13 @@ public class MjGlobalSettingsGenerationTests {
|
||||
|
||||
private MjGlobalSettings _settings;
|
||||
private XmlDocument _doc;
|
||||
private XmlElement _option;
|
||||
private XmlElement _size;
|
||||
private XmlElement _root;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp() {
|
||||
_settings = new GameObject("settings").AddComponent<MjGlobalSettings>();
|
||||
_doc = new XmlDocument();
|
||||
var root = (XmlElement)_doc.AppendChild(_doc.CreateElement("root"));
|
||||
_option = (XmlElement)root.AppendChild(_doc.CreateElement("option"));
|
||||
_size = (XmlElement)root.AppendChild(_doc.CreateElement("size"));
|
||||
_root = (XmlElement)_doc.AppendChild(_doc.CreateElement("root"));
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
@@ -61,9 +58,9 @@ public class MjGlobalSettingsGenerationTests {
|
||||
_settings.GlobalOptions.NoSlipTolerance = 6.7f;
|
||||
_settings.GlobalOptions.MprIterations = 8;
|
||||
_settings.GlobalOptions.MprTolerance = 0.9f;
|
||||
_settings.GlobalSizes.Nconmax = 321;
|
||||
_settings.GlobalSizes.Memory = "1M";
|
||||
|
||||
_settings.OptionSizeToMjcf(_option, _size);
|
||||
_settings.GlobalsToMjcf(_root);
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"impratio=""1.2"""));
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"magnetic=""3.4 4.5 5.6"""));
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"wind=""6.7 7.8 8.9"""));
|
||||
@@ -89,7 +86,7 @@ public class MjGlobalSettingsGenerationTests {
|
||||
[Test]
|
||||
public void GenerateFlag() {
|
||||
_settings.GlobalOptions.Flag.Gravity = EnableDisableFlag.disable;
|
||||
_settings.OptionSizeToMjcf(_option, _size);
|
||||
_settings.GlobalsToMjcf(_root);
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"gravity=""disable"""));
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"constraint="));
|
||||
Assert.That(_doc.OuterXml, Does.Contain(@"equality="));
|
||||
@@ -113,18 +110,22 @@ public class MjGlobalSettingsGenerationTests {
|
||||
public class MjGlobalSettingsParsingTests {
|
||||
|
||||
private MjGlobalSettings _settings;
|
||||
private XmlElement _root;
|
||||
private XmlElement _option;
|
||||
private XmlElement _size;
|
||||
private XmlElement _flag;
|
||||
private XmlElement _numeric;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp() {
|
||||
_settings = new GameObject("settings").AddComponent<MjGlobalSettings>();
|
||||
var doc = new XmlDocument();
|
||||
var root = (XmlElement)doc.AppendChild(doc.CreateElement("root"));
|
||||
_option = (XmlElement)root.AppendChild(doc.CreateElement("option"));
|
||||
_size = (XmlElement)root.AppendChild(doc.CreateElement("size"));
|
||||
_root = (XmlElement)doc.AppendChild(doc.CreateElement("root"));
|
||||
_option = (XmlElement)_root.AppendChild(doc.CreateElement("option"));
|
||||
_size = (XmlElement)_root.AppendChild(doc.CreateElement("size"));
|
||||
_flag = (XmlElement)_option.AppendChild(doc.CreateElement("flag"));
|
||||
var custom = (XmlElement)_root.AppendChild(doc.CreateElement("custom"));
|
||||
_numeric = (XmlElement)custom.AppendChild(doc.CreateElement("numeric"));
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
@@ -154,9 +155,12 @@ public class MjGlobalSettingsParsingTests {
|
||||
|
||||
_flag.SetAttribute("gravity", "disable");
|
||||
|
||||
_size.SetAttribute("nconmax", "432");
|
||||
_size.SetAttribute("memory", "1M");
|
||||
|
||||
_settings.ParseOptionSizeMjcf(_option, _size);
|
||||
_numeric.SetAttribute("name", "numeric_name");
|
||||
_numeric.SetAttribute("data", "1 2 3");
|
||||
|
||||
_settings.ParseGlobalMjcfSections(_root);
|
||||
Assert.That(_settings.GlobalOptions.ImpRatio, Is.EqualTo(1.2f));
|
||||
Assert.That(_settings.GlobalOptions.Magnetic, Is.EqualTo(new Vector3(3.4f, 4.5f, 5.6f)));
|
||||
Assert.That(_settings.GlobalOptions.Wind, Is.EqualTo(new Vector3(6.7f, 7.8f, 8.9f)));
|
||||
@@ -176,22 +180,11 @@ public class MjGlobalSettingsParsingTests {
|
||||
|
||||
Assert.That(_settings.GlobalOptions.Flag.Gravity, Is.EqualTo(EnableDisableFlag.disable));
|
||||
|
||||
Assert.That(_settings.GlobalSizes.Nconmax, Is.EqualTo(432));
|
||||
// these statements shouldn't fail:
|
||||
_settings.ParseOptionSizeMjcf(_option, null);
|
||||
_settings.ParseOptionSizeMjcf(null, _size);
|
||||
}
|
||||
Assert.That(_settings.GlobalSizes.Memory, Is.EqualTo("1M"));
|
||||
|
||||
[Test]
|
||||
public void AvoidMultipleFlagClauses() {
|
||||
var doubleFlagXML = @"<option>
|
||||
<flag/> <flag/>
|
||||
</option>";
|
||||
var doc = new XmlDocument();
|
||||
doc.LoadXml(doubleFlagXML);
|
||||
Assert.That(
|
||||
() => { _settings.ParseOptionSizeMjcf(doc.DocumentElement, null); },
|
||||
Throws.ArgumentException);
|
||||
Assert.That(_settings.CustomNumeric.Count, Is.EqualTo(1));
|
||||
Assert.That(_settings.CustomNumeric[0].Name, Is.EqualTo("numeric_name"));
|
||||
Assert.That(_settings.CustomNumeric[0].Data, Is.EqualTo("1 2 3"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,18 +101,6 @@ public class MjcfGenerationContextTests {
|
||||
Assert.That(element.OuterXml, Does.Contain("vertex=\"1 0 0 0 0 1 0 1 0 \""));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SettingNUserSensorValuesKeepsTheHigherValue() {
|
||||
var context = new MjcfGenerationContext();
|
||||
context.NUserSensor = 5;
|
||||
context.NUserSensor = 6;
|
||||
context.NUserSensor = 1;
|
||||
Assert.That(context.NUserSensor, Is.EqualTo(6));
|
||||
var element = new XmlDocument().CreateElement("test");
|
||||
context.GenerateMjcf(element);
|
||||
Assert.That(element.OuterXml, Does.Contain("nuser_sensor=\"6\""));
|
||||
}
|
||||
|
||||
#region Test setup.
|
||||
|
||||
private MjBody _componentA;
|
||||
|
||||
@@ -247,27 +247,27 @@ public class MjcfImporterTests {
|
||||
[Test]
|
||||
public void ReadingSize() {
|
||||
var mjcfString = @"<mujoco>
|
||||
<size njmax='1234'/>
|
||||
<size memory='1M'/>
|
||||
<worldbody/>
|
||||
</mujoco>";
|
||||
_sceneRoot = _importer.ImportString(
|
||||
name: string.Empty, mjcfString: mjcfString);
|
||||
var settings = _sceneRoot.GetComponentInChildren<MjGlobalSettings>();
|
||||
Assert.That(settings.GlobalSizes.Njmax, Is.EqualTo(1234));
|
||||
Assert.That(settings.GlobalSizes.Memory, Is.EqualTo("1M"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ReadingOptionAndSize() {
|
||||
var mjcfString = @"<mujoco>
|
||||
<option impratio='5.4321'/>
|
||||
<size njmax='4321'/>
|
||||
<size memory='16K'/>
|
||||
<worldbody/>
|
||||
</mujoco>";
|
||||
_sceneRoot = _importer.ImportString(
|
||||
name: string.Empty, mjcfString: mjcfString);
|
||||
var settings = _sceneRoot.GetComponentInChildren<MjGlobalSettings>();
|
||||
Assert.That(settings.GlobalOptions.ImpRatio, Is.EqualTo(5.4321f));
|
||||
Assert.That(settings.GlobalSizes.Njmax, Is.EqualTo(4321));
|
||||
Assert.That(settings.GlobalSizes.Memory, Is.EqualTo("16K"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
Reference in New Issue
Block a user