public void UnitsMath()
        {
            var units = new UnitsManager();

            var length = new Units.Length(2.0, units);
            var area   = new Units.Area(2.0, units);
            var volume = new Units.Volume(2.0, units);

            //addition
            var length_add = length + length;

            Assert.AreEqual(4, length_add.Value);
            var area_add = area + area;

            Assert.AreEqual(4, area_add.Value);
            var volume_add = volume + volume;

            Assert.AreEqual(4, volume_add.Value);

            Assert.Throws <UnitsException>(() => { var test = length + area; });
            Assert.Throws <UnitsException>(() => { var test = area + volume; });
            Assert.Throws <UnitsException>(() => { var test = length + volume; });

            //subtraction
            var length_sub = length - length;

            Assert.AreEqual(0, length_sub.Value);
            var area_sub = area - area;

            Assert.AreEqual(0, area_sub.Value);
            var volume_sub = volume - volume;

            Assert.AreEqual(0, volume_sub.Value);

            Assert.Throws <UnitsException>(() => { var test = length - area; });
            Assert.Throws <UnitsException>(() => { var test = area - volume; });
            Assert.Throws <UnitsException>(() => { var test = length - volume; });
            Assert.Throws <UnitsException>(() => { var test = area - length; });
            Assert.Throws <UnitsException>(() => { var test = volume - area; });
            Assert.Throws <UnitsException>(() => { var test = volume - length; });

            //multiplication
            Assert.AreEqual(4, (length * length).Value);
            Assert.IsInstanceOf <Area>(length * length);
            Assert.AreEqual(4, (length * area).Value);
            Assert.IsInstanceOf <Volume>(length * area);
            Assert.Throws <UnitsException>(() => { var test = area * area; });
            Assert.Throws <UnitsException>(() => { var test = volume * area; });
            Assert.Throws <UnitsException>(() => { var test = length * volume; });
            Assert.Throws <UnitsException>(() => { var test = volume * volume; });

            //division
            Assert.AreEqual(1, length / length);
            Assert.AreEqual(1, area / area);
            Assert.AreEqual(1, volume / volume);
            Assert.Throws <UnitsException>(() => { var test = length / area; });
            Assert.Throws <UnitsException>(() => { var test = area / volume; });
            Assert.Throws <UnitsException>(() => { var test = length / volume; });

            //modulo
            var length_mod = length % length;

            Assert.AreEqual(0, length_mod.Value);
            var area_mode = area % area;

            Assert.AreEqual(0, area_mode.Value);
            var volume_mod = volume % volume;

            Assert.AreEqual(0, volume_mod.Value);
            Assert.Throws <UnitsException>(() => { var test = length % area; });
            Assert.Throws <UnitsException>(() => { var test = area % volume; });
            Assert.Throws <UnitsException>(() => { var test = length % volume; });
            Assert.Throws <UnitsException>(() => { var test = area % length; });
            Assert.Throws <UnitsException>(() => { var test = volume % area; });
            Assert.Throws <UnitsException>(() => { var test = volume % length; });

            //ensure that when a formula is unit + double it returns a unit
            //and when it is double + unit, it returns a double

            Assert.AreEqual(new Length(length.Value + 2.0, units), length + 2.0);
            Assert.AreEqual(4.0, 2.0 + length);

            Assert.AreEqual(new Area(area.Value + 2.0, units), area + 2.0);
            Assert.AreEqual(4.0, 2.0 + area);

            Assert.AreEqual(new Volume(volume.Value + 2.0, units), volume + 2.0);
            Assert.AreEqual(4.0, 2.0 + volume);
        }
        public void UnitsMath()
        {
            var length = new Units.Length(2.0);
            var area = new Units.Area(2.0);
            var volume = new Units.Volume(2.0);

            //addition
            var length_add = length + length;
            Assert.AreEqual(4, length_add.Value);
            var area_add = area + area;
            Assert.AreEqual(4, area_add.Value);
            var volume_add = volume + volume;
            Assert.AreEqual(4, volume_add.Value);

            Assert.Throws<UnitsException>(() => { var test = length + area; });
            Assert.Throws<UnitsException>(() => { var test = area + volume; });
            Assert.Throws<UnitsException>(() => { var test = length + volume; });

            //subtraction
            var length_sub = length - length;
            Assert.AreEqual(0, length_sub.Value);
            var area_sub = area - area;
            Assert.AreEqual(0, area_sub.Value);
            var volume_sub = volume - volume;
            Assert.AreEqual(0, volume_sub.Value);

            Assert.Throws<UnitsException>(() => { var test = length - area; });
            Assert.Throws<UnitsException>(() => { var test = area - volume; });
            Assert.Throws<UnitsException>(() => { var test = length - volume; });
            Assert.Throws<UnitsException>(() => { var test = area - length; });
            Assert.Throws<UnitsException>(() => { var test = volume - area; });
            Assert.Throws<UnitsException>(() => { var test = volume - length; });

            //multiplication
            Assert.AreEqual(4, (length * length).Value);
            Assert.IsInstanceOf<Area>(length * length);
            Assert.AreEqual(4, (length * area).Value);
            Assert.IsInstanceOf<Volume>(length * area);
            Assert.Throws<UnitsException>(() => { var test = area * area; });
            Assert.Throws<UnitsException>(() => { var test = volume * area; });
            Assert.Throws<UnitsException>(() => { var test = length * volume; });
            Assert.Throws<UnitsException>(() => { var test = volume * volume; });

            //division
            Assert.AreEqual(1, length / length);
            Assert.AreEqual(1, area / area);
            Assert.AreEqual(1, volume / volume);
            Assert.Throws<UnitsException>(() => { var test = length / area; });
            Assert.Throws<UnitsException>(() => { var test = area / volume; });
            Assert.Throws<UnitsException>(() => { var test = length / volume; });

            //modulo
            var length_mod = length%length;
            Assert.AreEqual(0, length_mod.Value);
            var area_mode = area%area;
            Assert.AreEqual(0, area_mode.Value);
            var volume_mod = volume%volume;
            Assert.AreEqual(0, volume_mod.Value);
            Assert.Throws<UnitsException>(() => { var test = length % area; });
            Assert.Throws<UnitsException>(() => { var test = area % volume; });
            Assert.Throws<UnitsException>(() => { var test = length % volume; });
            Assert.Throws<UnitsException>(() => { var test = area % length; });
            Assert.Throws<UnitsException>(() => { var test = volume % area; });
            Assert.Throws<UnitsException>(() => { var test = volume % length; });

            //ensure that when a formula is unit + double it returns a unit
            //and when it is double + unit, it returns a double

            Assert.AreEqual(new Length(length.Value + 2.0), length + 2.0);
            Assert.AreEqual(4.0, 2.0 + length);

            Assert.AreEqual(new Area(area.Value + 2.0), area + 2.0);
            Assert.AreEqual(4.0, 2.0 + area);

            Assert.AreEqual(new Volume(volume.Value + 2.0), volume + 2.0);
            Assert.AreEqual(4.0, 2.0 + volume);
        }
Exemple #3
0
 public AreaFromNumber()
 {
     _measure = new Units.Area(0.0);
 }
Exemple #4
0
 public AreaInput()
 {
     _measure = new Units.Area(0.0);
     OutPortData.Add(new PortData("area", "The area. Stored internally as decimal meters squared.", typeof(FScheme.Value.Container)));
     RegisterAllPorts();
 }
        public void UnitsMath()
        {
            var length = new Units.Length(2.0);
            var area = new Units.Area(2.0);
            var volume = new Units.Volume(2.0);

            //addition
            var length_add = length + length;
            Assert.AreEqual(4, length_add.Value);
            var area_add = area + area;
            Assert.AreEqual(4, area_add.Value);
            var volume_add = volume + volume;
            Assert.AreEqual(4, volume_add.Value);

            Assert.Throws<UnitsException>(() => { var test = length + area; });
            Assert.Throws<UnitsException>(() => { var test = area + volume; });
            Assert.Throws<UnitsException>(() => { var test = length + volume; });

            //subtraction
            var length_sub = length - length;
            Assert.AreEqual(0, length_sub.Value);
            var area_sub = area - area;
            Assert.AreEqual(0, area_sub.Value);
            var volume_sub = volume - volume;
            Assert.AreEqual(0, volume_sub.Value);

            Assert.Throws<UnitsException>(() => { var test = length - area; });
            Assert.Throws<UnitsException>(() => { var test = area - volume; });
            Assert.Throws<UnitsException>(() => { var test = length - volume; });
            Assert.Throws<UnitsException>(() => { var test = area - length; });
            Assert.Throws<UnitsException>(() => { var test = volume - area; });
            Assert.Throws<UnitsException>(() => { var test = volume - length; });

            //multiplication
            Assert.AreEqual(4, (length * length).Value);
            Assert.Throws<UnitsException>(() => { var test = area * area; });
            Assert.Throws<UnitsException>(() => { var test = volume * area; });
            Assert.Throws<UnitsException>(() => { var test = length * volume; });

            //division
            Assert.AreEqual(1, length / length);
            Assert.AreEqual(1, area / area);
            Assert.AreEqual(1, volume / volume);
            Assert.Throws<UnitsException>(() => { var test = length / area; });
            Assert.Throws<UnitsException>(() => { var test = area / volume; });
            Assert.Throws<UnitsException>(() => { var test = length / volume; });

            //modulo
            var length_mod = length%length;
            Assert.AreEqual(0, length_mod.Value);
            var area_mode = area%area;
            Assert.AreEqual(0, area_mode.Value);
            var volume_mod = volume%volume;
            Assert.AreEqual(0, volume_mod.Value);
            Assert.Throws<UnitsException>(() => { var test = length % area; });
            Assert.Throws<UnitsException>(() => { var test = area % volume; });
            Assert.Throws<UnitsException>(() => { var test = length % volume; });
            Assert.Throws<UnitsException>(() => { var test = area % length; });
            Assert.Throws<UnitsException>(() => { var test = volume % area; });
            Assert.Throws<UnitsException>(() => { var test = volume % length; });
        }