public void TestUnaryOperator() { var input = @" Units(Base) := Mass | Length | Time | Temperature | ElectricCurent | AmountOfSubstance | LuninusIntensity Operators(Binary) := (*, Times, 1, 1) | (/, Per, 1, -1) Operators(Unary) := (Sq, 2) | (Sqrt, 0.5) Real(Types) := (float, RealFloat) Operator(*) := a = b * c | a = c * b | c = a / b | b = a / c Operator(/) := a = b / c | c = b / a | b = a * c | b = c * a Operator(Sq) := a = Sq b | a = b * b | b = Sqrt a Speed := Length / Time Acceleration := Speed / Time Area := Sq Length Volume := Area * Length Force := Mass * Acceleration Pressure := Force / Area Energy := Force * Length !Infer Slow Unit(Mass) := (gram, i, g) Unit(Length) := (meter, i, m) Unit(Time) := (second, i, s) | (hour, i/3600, h) | (minute, i/60, min) Unit(Temperature) := (kelvin, i, K) | (celzus, i + 273, ˙C) Unit(Force) := (newton, i, N) "; var res = Parser.ParseGrammarString(input); var area = new BinaryCompositUnit(new Unit("Length"), BinaryOperator.TIMES, new Unit("Length")); Assert.AreEqual(area.SiName(), res.GetUnit("Area").SiName()); }
public void Hard() { var l = new Unit("length"); var t = new Unit("time"); var area = new BinaryCompositUnit(l, BinaryOperator.TIMES, l); var volumen = new BinaryCompositUnit(area, BinaryOperator.TIMES, l); var hv = new BinaryCompositUnit(volumen, BinaryOperator.TIMES, l); var speed = new BinaryCompositUnit(l, BinaryOperator.OVER, t); var acceleration = new BinaryCompositUnit(speed, BinaryOperator.OVER, t); var state = new ParserState { Operators = new HashSet <IOperator> { BinaryOperator.TIMES, BinaryOperator.OVER, new UnaryOperator("SQ", "SQ") { Count = (2, null) } },
public void Easy() { var l = new Unit("length"); var t = new Unit("time"); var speed = new BinaryCompositUnit(l, BinaryOperator.OVER, t); var state = new ParserState { Operators = new HashSet <IOperator> { BinaryOperator.TIMES, BinaryOperator.OVER }, Units = new HashSet <IUnit> { l, t, speed } }; var(unit, depth) = Helpers.ShortestUnit(speed, state); Assert.AreEqual(speed.SiName(), unit.SiName()); Assert.AreEqual(1, depth); }
public override string SiName() { return(BinaryCompositUnit.SiName(this)); }