Exemplo n.º 1
0
 public static void AddListener(IOutputListener listener)
 {
     lock (sync)
     {
         listeners.Add(listener);
     }
 }
Exemplo n.º 2
0
        public IOutputListener addOutputListener(string[] ports)
        {
            IOutputListener listener = this.createOutputListener(ports);

            this.output_listeners.Add(listener);
            return(listener);
        }
Exemplo n.º 3
0
        public override void ExitRule(IParseTreeListener listener)
        {
            IOutputListener typedListener = listener as IOutputListener;

            if (typedListener != null)
            {
                typedListener.ExitText(this);
            }
        }
Exemplo n.º 4
0
        public override void EnterRule(IParseTreeListener listener)
        {
            IOutputListener typedListener = listener as IOutputListener;

            if (typedListener != null)
            {
                typedListener.EnterParams(this);
            }
        }
Exemplo n.º 5
0
        public void testXML(string file_path)
        {
            XElement test_xml = XDocument.Load(file_path).Root.Element("test");

            Assert.AreNotEqual(null, test_xml, "No test data found. (A test that should just compile correctly, still needs an empthy test tag.)");

            //Calculate path to output file
            this.path_generated_code = Path.ChangeExtension(Path.GetFileName(file_path), ".cs");

            this.keep_after_test = false;
            if (File.Exists(this.path_generated_code))
            {
                this.keep_after_test = true;
                File.Delete(this.path_generated_code);
            }

            string expected_exception = null;

            if (test_xml.Attribute("exception") != null && test_xml.Attribute("exception").Value.Trim() != "")
            {
                expected_exception = test_xml.Attribute("exception").Value.Trim();
            }

            //Call code generator
            if (!this.generate(file_path, expected_exception))
            {
                return;
            }

            //Compile generated code
            CodeCompiler code_compiler = new CodeCompiler();

            code_compiler.AddReferencedAssembly("System.dll");
            code_compiler.AddReferencedAssembly("sccdlib.dll");
            Assembly assembly   = code_compiler.compileFile(this.path_generated_code);
            Type     class_type = assembly.GetType("Controller");

            //Prepare expected output
            XElement expected_xml = test_xml.Element("expected");

            if (expected_xml == null)
            {
                return;
            }

            HashSet <string>         output_ports    = new HashSet <string>();
            List <List <TestEvent> > expected_result = new List <List <TestEvent> >();

            foreach (XElement slot_xml in expected_xml.Elements("slot"))
            {
                List <TestEvent> slot = new List <TestEvent>();
                foreach (XElement event_xml in slot_xml.Elements("event"))
                {
                    string        event_name = event_xml.Attribute("name").Value;
                    string        port       = event_xml.Attribute("port").Value;
                    List <string> parameters = new List <string>();
                    foreach (XElement parameter_xml in event_xml.Elements("parameter"))
                    {
                        string parameter_value = parameter_xml.Attribute("value").Value;
                        parameters.Add(parameter_value);
                    }
                    slot.Add(new TestEvent(event_name, port, parameters));
                    output_ports.Add(port);
                }
                if (slot.Count > 0)
                {
                    expected_result.Add(slot);
                }
            }

            //Prepare model
            ThreadsControllerBase controller      = (ThreadsControllerBase)Activator.CreateInstance(class_type, new object [] { false });
            IOutputListener       output_listener = controller.addOutputListener(output_ports.ToArray());

            //Input
            XElement input_xml = test_xml.Element("input");

            if (input_xml != null)
            {
                foreach (XElement event_xml in input_xml.Elements("event"))
                {
                    controller.addInput(new Event(event_xml.Attribute("name").Value, event_xml.Attribute("port").Value), Convert.ToDouble(event_xml.Attribute("time").Value));
                }
            }

            //Execute model
            controller.start();
            controller.join();

            //Check output
            for (int slot_index = 0; slot_index < expected_result.Count; slot_index++)
            {
                List <TestEvent> slot = expected_result[slot_index];
                List <TestEvent> remaining_options = new List <TestEvent>(slot);
                List <Event>     received_output   = new List <Event>();
                while (remaining_options.Count > 0)
                {
                    Event output_event = output_listener.fetch();
                    Assert.AreNotEqual(null, output_event,
                                       string.Format("Expected results slot {0} mismatch. Expected [{1}], but got [{2}] followed by null instead.", slot_index, string.Join(", ", slot), string.Join(", ", received_output))
                                       );
                    received_output.Add(output_event);
                    int i = 0;
                    foreach (TestEvent option in remaining_options)
                    {
                        if (option.matches(output_event))
                        {
                            break;
                        }
                        i++;
                    }
                    //Mismath?
                    Assert.AreNotEqual(remaining_options.Count, i,
                                       string.Format("Expected results slot {0} mismatch. Expected [{1}], but got [{2}] instead.", slot_index, string.Join(", ", slot), string.Join(", ", received_output))
                                       );
                    remaining_options.RemoveAt(i);
                }
            }
            //check if there are no extra events
            Assert.AreEqual(null, output_listener.fetch(), "More output events than expected on selected ports.");
        }
Exemplo n.º 6
0
 public IntcodeComputer(IInputProvider inputProvider, IOutputListener outputListener)
 {
     _inputProvider  = inputProvider;
     _outputListener = outputListener;
 }
Exemplo n.º 7
0
 public IntcodeComputer()
 {
     _inputProvider  = new ConsoleInputProvider();
     _outputListener = new ConsoleOutputListener();
 }