// Инициализация потоком
 public DataStreamTable(HashSet <SemilatticeStreamValue> stream)
 {
     if (stream == null)
     {
         Table = new Dictionary <string, SemilatticeValue>();
     }
     else
     {
         Table = DataStreamValue.CreateTableByStream(stream);
     }
 }
        static public void TestForStreamValueOperator()
        {
            var set1 = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "12")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.CONST, "14"))
            };
            var dataStreamValue1 = new DataStreamValue(set1);
            var set2             = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "12")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.CONST, "14"))
            };
            var dataStreamValue2 = new DataStreamValue(set2);
            var dataStreamValue3 = dataStreamValue1 ^ dataStreamValue2;
            var table3           = DataStreamValue.CreateTableByStream(dataStreamValue3.Stream);

            Debug.Assert(table3["a"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "12"));
            Debug.Assert(table3["b"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "13"));
            Debug.Assert(table3["c"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "14"));

            set1 = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "12")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.CONST, "14"))
            };
            dataStreamValue1 = new DataStreamValue(set1);
            set2             = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "14")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.UNDEF))
            };
            dataStreamValue2 = new DataStreamValue(set2);
            dataStreamValue3 = dataStreamValue1 ^ dataStreamValue2;
            table3           = DataStreamValue.CreateTableByStream(dataStreamValue3.Stream);
            Debug.Assert(table3["a"] == new SemilatticeValue(SemilatticeValueEnum.NAC));
            Debug.Assert(table3["b"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "13"));
            Debug.Assert(table3["c"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "14"));
        }
        static public void TestForOperator()
        {
            var constDistribOperator = new ConstDistribOperator();
            var set1 = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "12")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.CONST, "14"))
            };
            var set2 = new HashSet <SemilatticeStreamValue>()
            {
                new SemilatticeStreamValue("a", new SemilatticeValue(SemilatticeValueEnum.CONST, "14")),
                new SemilatticeStreamValue("b", new SemilatticeValue(SemilatticeValueEnum.CONST, "13")),
                new SemilatticeStreamValue("c", new SemilatticeValue(SemilatticeValueEnum.UNDEF))
            };
            var set3   = constDistribOperator.Collect(set1, set2);
            var table3 = DataStreamValue.CreateTableByStream(set3);

            Debug.Assert(table3["a"] == new SemilatticeValue(SemilatticeValueEnum.NAC));
            Debug.Assert(table3["b"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "13"));
            Debug.Assert(table3["c"] == new SemilatticeValue(SemilatticeValueEnum.CONST, "14"));
        }