예제 #1
0
        public void TestMultiplication_Three()
        {
            var intField = new RealField();
            var curve    = new RealCurve(intField, intField.Value(-7), intField.Value(10));

            var a = new Point(intField.Value(1), intField.Value(2));

            var c = Point.Multiply(curve, intField.Value(3), a);

            Assert.Equal(intField.Value(9), c.X);
            Assert.Equal(intField.Value(-26), c.Y);
        }
예제 #2
0
        public void TestAddition_Same()
        {
            var intField = new RealField();
            var curve    = new RealCurve(intField, intField.Value(-7), intField.Value(10));

            var a = new Point(intField.Value(1), intField.Value(2));

            var c = Point.Add(curve, a, a) !;

            Assert.Equal(intField.Value(-1), c.X);
            Assert.Equal(intField.Value(-4), c.Y);
        }
예제 #3
0
        public void TestAddition_Basic()
        {
            var intField = new RealField();
            var curve    = new RealCurve(intField, intField.Value(-7), intField.Value(10));

            var a = new Point(intField.Value(1), intField.Value(2));
            var b = new Point(intField.Value(3), intField.Value(4));

            var c = Point.Add(curve, a, b) !;

            Assert.Equal(intField.Value(-3), c.X);
            Assert.Equal(intField.Value(2), c.Y);
        }
예제 #4
0
 protected void SetUp()
 {
     // The tolerance is 2.0^-8
     Field = new RealField(0.00390625);
 }
예제 #5
0
        protected void SetUp()
        {
            // Tolerance is 2.0^-8.
            TestRealField    = new RealField(0.00390625);
            TestRealMatrices = new Dictionary <string, Matrix <RealFieldElement> >();

            TestRealMatrices.Add("A", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 1, 0, 5 },
                { 3, 4, 0, -2 },
                { 6, 1, 0, 7 }
            }));
            TestRealMatrices.Add("B", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 1, 5 },
                { 3, 4, -2 },
                { 6, 1, 7 }
            }));
            TestRealMatrices.Add("C", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 0, 0, 0 },
                { 2, 1, 0, 5 },
                { 3, 4, 0, -2 },
                { 6, 1, 0, 7 }
            }));
            TestRealMatrices.Add("D", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 0, 0 },
                { 2, 1, 5 },
                { 3, 4, -2 },
                { 6, 1, 7 }
            }));
            TestRealMatrices.Add("E", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 2, 1, 5 },
                { 0, 3, 4, -2 },
                { 0, 6, 1, 7 }
            }));
            TestRealMatrices.Add("F", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 3, 4, -2 },
                { 2, 1, 5 },
                { 6, 1, 7 }
            }));
            TestRealMatrices.Add("G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 1, 2, 5 },
                { 4, 3, -2 },
                { 1, 6, 7 }
            }));
            TestRealMatrices.Add("H", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 3, 6 },
                { 1, 4, 1 },
                { 0, 0, 0 },
                { 5, -2, 7 }
            }));
            TestRealMatrices.Add("+A", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 1, 0, 5 },
                { 3, 4, 0, -2 },
                { 6, 1, 0, 7 }
            }));
            TestRealMatrices.Add("-B", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -2, -1, -5 },
                { -3, -4, 2 },
                { -6, -1, -7 }
            }));
            TestRealMatrices.Add("+C", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 0, 0, 0 },
                { 2, 1, 0, 5 },
                { 3, 4, 0, -2 },
                { 6, 1, 0, 7 }
            }));
            TestRealMatrices.Add("-D", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -0, -0, -0 },
                { -2, -1, -5 },
                { -3, -4, 2 },
                { -6, -1, -7 }
            }));
            TestRealMatrices.Add("+E", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 2, 1, 5 },
                { 0, 3, 4, -2 },
                { 0, 6, 1, 7 }
            }));
            TestRealMatrices.Add("-F", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -3, -4, 2 },
                { -2, -1, -5 },
                { -6, -1, -7 }
            }));
            TestRealMatrices.Add("+G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 1, 2, 5 },
                { 4, 3, -2 },
                { 1, 6, 7 }
            }));
            TestRealMatrices.Add("-H", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -2, -3, -6 },
                { -1, -4, -1 },
                { -0, -0, -0 },
                { -5, 2, -7 }
            }));
            TestRealMatrices.Add("A:Row[1]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 3, 4, 0, -2 }
            }));
            TestRealMatrices.Add("C:Row[3]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 6, 1, 0, 7 }
            }));
            TestRealMatrices.Add("E:Row[0]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 2, 1, 5 }
            }));
            TestRealMatrices.Add("G:Row[2]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 1, 6, 7 }
            }));
            TestRealMatrices.Add("B:Column[2]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 5 },
                { -2 },
                { 7 }
            }));
            TestRealMatrices.Add("D:Column[0]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0 },
                { 2 },
                { 3 },
                { 6 }
            }));
            TestRealMatrices.Add("F:Column[1]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 4 },
                { 1 },
                { 1 }
            }));
            TestRealMatrices.Add("H:Column[0]", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2 },
                { 1 },
                { 0 },
                { 5 }
            }));
            TestRealMatrices.Add("A+E", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 3, 1, 10 },
                { 3, 7, 4, -4 },
                { 6, 7, 1, 14 }
            }));
            TestRealMatrices.Add("A-E", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, -1, -1, 0 },
                { 3, 1, -4, 0 },
                { 6, -5, -1, 0 }
            }));
            TestRealMatrices.Add("B+F", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 5, 5, 3 },
                { 5, 5, 3 },
                { 12, 2, 14 }
            }));
            TestRealMatrices.Add("B-F", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -1, -3, 7 },
                { 1, 3, -7 },
                { 0, 0, 0 }
            }));
            TestRealMatrices.Add("B+G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 3, 3, 10 },
                { 7, 7, -4 },
                { 7, 7, 14 }
            }));
            TestRealMatrices.Add("B-G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 1, -1, 0 },
                { -1, 1, 0 },
                { 5, -5, 0 }
            }));
            TestRealMatrices.Add("D+H", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 3, 6 },
                { 3, 5, 6 },
                { 3, 4, -2 },
                { 11, -1, 14 }
            }));
            TestRealMatrices.Add("D-H", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { -2, -3, -6 },
                { 1, -3, 4 },
                { 3, 4, -2 },
                { 1, 3, 0 }
            }));
            TestRealMatrices.Add("F+G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 4, 6, 3 },
                { 6, 4, 3 },
                { 7, 7, 14 }
            }));
            TestRealMatrices.Add("F-G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2, 2, -7 },
                { -2, -2, 7 },
                { 5, -5, 0 }
            }));
            TestRealMatrices.Add("+2.0A", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 4, 2, 0, 10 },
                { 6, 8, 0, -4 },
                { 12, 2, 0, 14 }
            }));
            TestRealMatrices.Add("-1.5C", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0.0, 0.0, 0.0, 0.0 },
                { -3.0, -1.5, 0.0, -7.5 },
                { -4.5, -6.0, 0.0, 3.0 },
                { -9.0, -1.5, 0.0, -10.5 }
            }));
            TestRealMatrices.Add("+0.0E", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0, 0, 0, 0 },
                { 0, 0, 0, 0 },
                { 0, 0, 0, 0 }
            }));
            TestRealMatrices.Add("+2.2G", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2.2, 4.4, 11.0 },
                { 8.8, 6.6, -4.4 },
                { 2.2, 13.2, 15.4 }
            }));
            TestRealMatrices.Add("B/+2.0", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 1.0, 0.5, 2.5 },
                { 1.5, 2.0, -1.0 },
                { 3.0, 0.5, 3.5 }
            }));
            TestRealMatrices.Add("D/-0.2", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 0.0, 0.0, 0.0 },
                { -10.0, -5.0, -25.0 },
                { -15.0, -20.0, 10.0 },
                { -30.0, -5.0, -35.0 }
            }));
            TestRealMatrices.Add("F/+1.0", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 3, 4, -2 },
                { 2, 1, 5 },
                { 6, 1, 7 }
            }));
            TestRealMatrices.Add("H/+0.8", Matrix <RealFieldElement> .FromArray(TestRealField, new RealFieldElement[, ]
            {
                { 2.50, 3.75, 7.50 },
                { 1.25, 5.00, 1.25 },
                { 0.00, 0.00, 0.00 },
                { 6.25, -2.50, 8.75 }
            }));
            TestRealMatrices.Add("I", Matrix <RealFieldElement> .Identity(TestRealField, 4));
            TestRealMatrices.Add("0", Matrix <RealFieldElement> .Zeros(TestRealField, 3, 4));
            TestRealMatrices.Add("1", Matrix <RealFieldElement> .Ones(TestRealField, 2, 7));
        }
예제 #6
0
파일: IfpTag.cs 프로젝트: MikeMatt16/Abide
        public IfpTagBlock(IfpNode ifpNode)
        {
            int size;

            if (ifpNode.HeaderSize > ifpNode.TagBlockSize)
            {
                size = ifpNode.HeaderSize;
            }
            else
            {
                size = ifpNode.TagBlockSize;
            }

            AnalyzeFieldSet(ifpNode.Nodes, size);

            int offset = 0, previousOffset = 0;

            if (ifpNode.Alignment > 0)
            {
                alignment = ifpNode.Alignment;
            }

            bool skipId = false;

            foreach (var node in ifpNode.Nodes)
            {
                Field field = null;
                if (node.FieldOffset >= offset)
                {
                    offset = node.FieldOffset;
                }
                else if (node.FieldOffset > 0)
                {
                    continue;
                }

                if (node.Type == IfpNodeType.Tag)
                {
                    int nodeIndex = ifpNode.Nodes.IndexOf(node);
                    if (ifpNode.Nodes.Count > nodeIndex && ifpNode.Nodes[nodeIndex + 1].Type == IfpNodeType.TagId)
                    {
                        skipId = true;
                        continue;
                    }
                }
                else if (node.Type == IfpNodeType.TagId && skipId)
                {
                    skipId = false;
                    field  = new TagReferenceField(node.Name);
                }
                else
                {
                    switch (node.Type)
                    {
                    case IfpNodeType.TagBlock:
                        field = new IfpBlockField(node);
                        break;

                    case IfpNodeType.UnusedArray:
                        field = new PadField(node.Name, node.Length);
                        break;

                    case IfpNodeType.Byte:
                    case IfpNodeType.SignedByte:
                        field = new CharIntegerField(node.Name);
                        break;

                    case IfpNodeType.Short:
                    case IfpNodeType.UnsignedShort:
                        field = new ShortIntegerField(node.Name);
                        break;

                    case IfpNodeType.Int:
                    case IfpNodeType.UnsignedInt:
                        field = new LongIntegerField(node.Name);
                        break;

                    case IfpNodeType.Single:
                        field = new RealField(node.Name);
                        break;

                    case IfpNodeType.Enumerator8:
                        field = new CharEnumField(node.Name);
                        break;

                    case IfpNodeType.Enumerator16:
                        field = new EnumField(node.Name);
                        break;

                    case IfpNodeType.Enumerator32:
                        field = new LongEnumField(node.Name);
                        break;

                    case IfpNodeType.Bitfield8:
                        field = new ByteFlagsField(node.Name);
                        break;

                    case IfpNodeType.Bitfield16:
                        field = new WordFlagsField(node.Name);
                        break;

                    case IfpNodeType.Bitfield32:
                        field = new LongFlagsField(node.Name);
                        break;

                    case IfpNodeType.String32:
                        field = new StringField(node.Name);
                        break;

                    case IfpNodeType.String64:
                        break;

                    case IfpNodeType.Unicode128:
                        break;

                    case IfpNodeType.Unicode256:
                        break;

                    case IfpNodeType.Tag:
                        field = new TagField(node.Name);
                        break;

                    case IfpNodeType.TagId:
                        field = new TagIndexField(node.Name);
                        break;

                    case IfpNodeType.StringId:
                        field = new StringIdField(node.Name);
                        break;
                    }
                }

                if (field != null)
                {
                    if (node.Type == IfpNodeType.Enumerator8 || node.Type == IfpNodeType.Enumerator16 || node.Type == IfpNodeType.Enumerator32 ||
                        node.Type == IfpNodeType.Bitfield8 || node.Type == IfpNodeType.Bitfield16 || node.Type == IfpNodeType.Bitfield32)
                    {
                        var optionField = (OptionField)field;
                        foreach (var optionNode in node.Nodes)
                        {
                            optionField.Options.Add(new Option(optionNode.Name, optionNode.Value));
                        }
                    }

                    if (previousOffset <= offset)
                    {
                        int length = offset - previousOffset;
                        if (length > 0)
                        {
                            Fields.Add(new PadField("ifp padding", length));
                        }

                        offset        += field.Size;
                        previousOffset = offset;
                        Fields.Add(field);
                    }
                }
            }

            if (offset < size)
            {
                Fields.Add(new PadField("ifp padding", size - offset));
            }

            if (!string.IsNullOrEmpty(ifpNode.Label))
            {
                var labelFields = Fields.Where(f => f.Name.Equals(ifpNode.Label, StringComparison.OrdinalIgnoreCase));
                foreach (var labelField in labelFields)
                {
                    this.labelFields.Add(labelField);
                }
            }
        }