Exemplo n.º 1
0
        public void GetSwitches_Test() {
            Vertex
                v1 = new Vertex(48, 50, 2, 4),
                v2 = new Vertex(49, 48, 2, 4),
                v3 = new Vertex(54, 53, 2, 4),
                v4 = new Vertex(50, 51, 3, 4),
                v5 = new Vertex(50, 49, 2, 4),
                v6 = new Vertex(65, 66, 2, 4),
                v7 = new Vertex(97, 98, 3, 4),
                v8 = new Vertex(96, 35, 2, 4),
                v9 = new Vertex(95, 26, 2, 4);

            Edge
                e1 = new Edge(v2, v3, 5, true, true),
                e2 = new Edge(v2, v5, 1, true, true),
                e3 = new Edge(v2, v6, 17, true, false),
                e4 = new Edge(v2, v3, 5, false, false),
                e5 = new Edge(v2, v5, 1, false, false),
                e7 = new Edge(v8, v9, 1, true, true),
                e6 = new Edge(v2, v6, 17, false, true),
                e8 = new Edge(v8, v9, 9, false, false);

            Graph g = new Graph() {
                Vertices = {v1, v2, v3, v4, v5, v6, v7, v8, v9},
                Edges = {e1, e2, e3, e4, e5, e6, e7, e8}
            };

            Assert.AreEqual(new List<Edge> {e5,e7}.ToString(), g.GetSwitches().ToString() );
        }
Exemplo n.º 2
0
        public void Vertex_ToStringTest()
        {
            short SampleInput1 = 5;
            short SampleInput2 = 6;
            byte messageInput = 11;
            byte modulo = 4;

            Vertex vertex1 = new Vertex(SampleInput1, SampleInput2, messageInput, modulo);

            Assert.AreEqual("(5,6)", vertex1.ToString());
        }
Exemplo n.º 3
0
        public void GraphToString_Test()
        {
            short SampleInput1 = 5;
            short SampleInput2 = 6;
            byte messageInput1 = 11;
            byte modulo1 = 100;

            Vertex vertex1 = new Vertex(SampleInput1, SampleInput2, messageInput1, modulo1);

            short SampleInput3 = 7;
            short SampleInput4 = 8;
            byte messageInput2 = 100;
            byte modulo2 = 100;

            Vertex vertex2 = new Vertex(SampleInput3, SampleInput4, messageInput2, modulo2);

            Graph graph1 = new Graph();

            graph1.Vertices.Add(vertex1);
            graph1.Vertices.Add(vertex2);

            Assert.AreEqual("These are my vertices: \n(5,6)\n(7,8)\n", graph1.ToString());
        }
Exemplo n.º 4
0
        public void MergeGraphAndQuantizedValues_Test()
        {
            JpegImage ji = new JpegImage(new Bitmap(200, 100), 100, 4);
            PrivateObject po = new PrivateObject(ji);
            
            Vertex
                v1 = new Vertex(2, 3, 1, 4);

            Graph inputGraph = new Graph();

            inputGraph.Vertices.Add(v1);
            short[,] inBlock8 = new short[8, 8];
            
            var expectedTuple = new Tuple<short[,], HuffmanTable, HuffmanTable, int>(inBlock8, ji.YDCHuffman, ji.YACHuffman, 0);
            
            var quantizedBlocks = new List<Tuple<short[,], HuffmanTable, HuffmanTable, int>>();
            var expectedQuantizedBlocks = new List<Tuple<short[,], HuffmanTable, HuffmanTable, int>>();

            quantizedBlocks.Add(expectedTuple);

            expectedQuantizedBlocks = quantizedBlocks;

            po.Invoke("_mergeGraphAndQuantizedValues", inputGraph);

            var returnedQuantizedBlocks = (List<Tuple<short[,], HuffmanTable, HuffmanTable, int>>)po.GetField("_quantizedBlocks");

            Assert.AreEqual(expectedQuantizedBlocks.ToString(), returnedQuantizedBlocks.ToString());
        }
Exemplo n.º 5
0
        public void ForceSampleChange()
        {
            PrivateType pt = new PrivateType(typeof(JpegImage));
            Vertex
                inputVertex = new Vertex(0, 1, 0, 4),
                expectedVertex = new Vertex(-1, 1, 0, 4);

            pt.InvokeStatic("_forceSampleChange", inputVertex);

            Assert.AreEqual(expectedVertex.ToString(), inputVertex.ToString());
        }
Exemplo n.º 6
0
        public void SwapVertexData()
        {
            PrivateType pt = new PrivateType(typeof(JpegImage));
            Vertex
                inputV1 = new Vertex(0, 1, 0, 4),
                inputV2 = new Vertex(2, 3, 0, 4),
                expectedV1 = new Vertex(2, 1, 0, 4),
                expectedV2 = new Vertex(0, 3, 0, 4);

            Edge
                inputE1 = new Edge(inputV1, inputV2, 0, true, true),
                expectedE1 = new Edge(expectedV1, expectedV2, 0, true, true);

            pt.InvokeStatic("_swapVertexData", inputE1);

            Assert.AreEqual(expectedE1.ToString(), inputE1.ToString());
        }
Exemplo n.º 7
0
        public void RefactorGraph_Test() //TODO: fix this test
        {
            PrivateType pt = new PrivateType(typeof(JpegImage));

            Vertex
                v1 = new Vertex(0, 1, 0, 4),
                v2 = new Vertex(2, 3, 2, 4),
                v3 = new Vertex(4, 5, 3, 4),
                v4 = new Vertex(6, 7, 3, 4),
                v5 = new Vertex(8, 9, 4, 4),
                v6 = new Vertex(10, 11, 5, 4);
            Edge
                e1 = new Edge(v1, v2, 1, true, false),
                e2 = new Edge(v3, v4, 2, true, true),
                e3 = new Edge(v5, v6, 2, false, true);

            Graph inputGraph = new Graph();
            Graph sad = new Graph();
            inputGraph.Edges.Add(e1);
            inputGraph.Edges.Add(e2);
            inputGraph.Edges.Add(e3);
            sad.Edges.Add(e1);
            sad.Edges.Add(e2);
            sad.Edges.Add(e3);
            sad.Vertices.AddRange(new List<Vertex>() { v1, v2, v3, v4, v5, v6 });
            inputGraph.Vertices.AddRange(new List<Vertex>() { v1, v2, v3, v4, v5, v6 });

            
            pt.InvokeStatic("_refactorGraph", inputGraph);
            
            Assert.AreEqual(sad.Vertices, inputGraph.Vertices);
        }
Exemplo n.º 8
0
        public void AddEdge_Test()
        {
            PrivateType pt = new PrivateType(typeof(JpegImage));

            Vertex
                v1 = new Vertex(0, 1, 0, 4),
                v2 = new Vertex(2, 3, 2, 4),
                v3 = new Vertex(4, 5, 3, 4),
                v4 = new Vertex(6, 7, 3, 4),
                v5 = new Vertex(8, 9, 4, 4),
                v6 = new Vertex(10, 11, 5, 4);

            Graph inputGraph = new Graph();
            inputGraph.Vertices.AddRange(new List<Vertex>() { v1, v2, v3, v4, v5, v6 });

            int inputThreshold = 5;

            pt.InvokeStatic("_addEdge", new object[] {true, false, v1, v2, inputThreshold, inputGraph});    //pass
            pt.InvokeStatic("_addEdge", new object[] {true, true, v3, v4, inputThreshold, inputGraph});     //pass
            pt.InvokeStatic("_addEdge", new object[] {false, true, v5, v6, inputThreshold, inputGraph});    //fail

            Graph expectedGraph = new Graph();

            expectedGraph.Edges.Add(new Edge(v1, v2, 3, true, false));
            expectedGraph.Edges.Add(new Edge(v3, v4, 2, true, true));

            Assert.AreEqual(expectedGraph.Edges, inputGraph.Edges);
        }
Exemplo n.º 9
0
        public void AddVertices_Test()
        {
            PrivateObject po = new PrivateObject(new JpegImage(new Bitmap(200, 100), 100, 4));

            List<short> inputNonZeroValues = new List<short>();
            List<byte> inputMessage = new List<byte>();

            for (int i = 0; i < 20; i++)
            {
                inputNonZeroValues.Add((short)i);
            }
            for (int e = 0; e < 10; e++)
            {
                inputMessage.Add((byte)e);
            }

            po.SetField("_nonZeroValues", inputNonZeroValues);
            po.SetField("_message",inputMessage);

            Vertex
                v1 = new Vertex(0, 1, 0, 4),
                v2 = new Vertex(2, 3, 1, 4),
                v3 = new Vertex(4, 5, 2, 4),
                v4 = new Vertex(6, 7, 3, 4),
                v5 = new Vertex(8, 9, 4, 4),
                v6 = new Vertex(10, 11, 5, 4),
                v7 = new Vertex(12, 13, 6, 4),
                v8 = new Vertex(14, 15, 7, 4),
                v9 = new Vertex(16, 17, 8, 4),
                v10 = new Vertex(18, 19, 9, 4);

            Graph returnedGraph = new Graph();
            Graph expectedGraph = new Graph();

            expectedGraph.Vertices.AddRange(new List<Vertex>() {v1, v2, v3, v4, v5, v6, v7, v8, v9, v10});

            po.Invoke("_addVertices", returnedGraph);

            Assert.AreEqual(expectedGraph.ToString(), returnedGraph.ToString());
        }
Exemplo n.º 10
0
        private static void _forceSampleChange(Vertex vertex) {
            int error = (vertex.SampleValue1 + vertex.SampleValue2).Mod(vertex.Modulo) - vertex.Message;

            if (vertex.SampleValue1 - error <= 127 && vertex.SampleValue1 - error >= -128 &&
                vertex.SampleValue1 - error != 0) {
                vertex.SampleValue1 -= error;
            } else if (vertex.SampleValue2 - error <= 127 && vertex.SampleValue2 - error >= -128 &&
                       vertex.SampleValue2 - error != 0) {
                vertex.SampleValue2 -= error;
            } else {
                vertex.SampleValue1 += vertex.Modulo - error;
            }
        }
Exemplo n.º 11
0
 private static void _addEdge(bool firstFirst, bool secondFirst, Vertex first, Vertex second, int threshold, Graph g) {
     if (((firstFirst ? first.SampleValue2 : first.SampleValue1) + (secondFirst ? second.SampleValue1 : second.SampleValue2)).Mod(first.Modulo) == first.Message) {
         if (((firstFirst ? first.SampleValue1 : first.SampleValue2) + (secondFirst ? second.SampleValue2 : second.SampleValue1)).Mod(second.Modulo) == second.Message) {
             Edge e = new Edge(first, second, firstFirst, secondFirst);
             if (e.Weight < threshold) {
                 g.Edges.Add(e);
             }
         }
     }
 }
Exemplo n.º 12
0
 public Edge(Vertex vStart, Vertex vEnd, bool vStartFirstItem, bool vEndFirstItem) {
     VStart = vStart;
     VEnd = vEnd;
     VStartFirst = vStartFirstItem;
     VEndFirst = vEndFirstItem;
 }
Exemplo n.º 13
0
 private static void _addEdge(bool startFirst, bool endFirst, Vertex first, Vertex second, int threshold, Graph g) {
     
     short weight = (short)Math.Abs((startFirst ? first.SampleValue1 : first.SampleValue2) - (endFirst ? second.SampleValue1 : second.SampleValue2));
     if (weight < threshold) {
         if (((startFirst ? first.SampleValue2 : first.SampleValue1) + (endFirst ? second.SampleValue1 : second.SampleValue2)).Mod(first.Modulo) == first.Message) {
             if (((startFirst ? first.SampleValue1 : first.SampleValue2) + (endFirst ? second.SampleValue2 : second.SampleValue1)).Mod(second.Modulo) == second.Message) {
                 lock (g) {
                     g.Edges.Add(new Edge(first, second, weight, startFirst, endFirst));
                 }
             }
         }
    }
 }