static void Main(string[] args) { #region Prueba1 //CalculadoraSimple cs = new CalculadoraSimple(); //cs.Ejecuta(new Operacion('+', 2)); //cs.Ejecuta(new Operacion('+', 3)); //cs.Ejecuta(new Operacion('*', 10)); //Console.WriteLine(cs.ResultadoActual()); //imprime 50 //cs.Undo(); //Console.WriteLine(cs.ResultadoActual()); //imprime 5 //cs.Undo(); //Console.WriteLine(cs.ResultadoActual()); //imprime 2 //cs.Redo(); //Console.WriteLine(cs.ResultadoActual()); //imprime 5 #endregion #region Prueba2 //CalculadoraSimple cs = new CalculadoraSimple(); //cs.Ejecuta(new Operacion('*', 0)); //operacion 1 //Console.WriteLine(cs.ResultadoActual()); // imprime 0 //cs.Ejecuta(new Operacion('/', 5)); //operacion 2 //Console.WriteLine(cs.ResultadoActual()); // imprime 0 //cs.Ejecuta(new Operacion('+', 10)); //operacion 3 //cs.Ejecuta(new Operacion('+', 10)); //operacion 4 //cs.Ejecuta(new Operacion('+', 10)); //operacion 5 //cs.Ejecuta(new Operacion('+', 10)); //operacion 6 //Console.WriteLine(cs.ResultadoActual()); // imprime 40 //cs.Undo(); //des-hace la opereación 6 //Console.WriteLine(cs.ResultadoActual()); // imprime 30 //cs.Ejecuta(new Operacion('+', 5)); //operacion 7 //cs.Redo(); //sin efecto pq la instrucción inmediata anterior no fue "Undo" //Console.WriteLine(cs.ResultadoActual()); // imprime 35 //cs.Undo(); //des-hace la opereación 7 //cs.Undo(); //des-hace la opereación 5 (la operacion 6 ya había sido des-hecha) //Console.WriteLine(cs.ResultadoActual()); // imprime 20 //cs.Redo(); //re-hace la operacion 5 //cs.Redo(); //re-hace la operacion 7 //cs.Redo(); //sin efecto porque solo se habían hecho dos Undo inmediatamente antes //Console.WriteLine(cs.ResultadoActual()); // imprime 35 //Note que en este caso la operacion 6 fue des-hecha y no interviene en el resultado //foreach (var operacion in cs.OperacionesEfectivas()) //{ // Console.WriteLine(operacion); //} ////Note que la operación 6 no se considera efectiva (fue deshecha y no se rehízo) ////Esto imprime las operaciones 1, 2, 3, 4, 5 y 7, es decir se escribiría //// (* 0) // (/ 5) // (+ 10) // (+ 10) // (+ 10)// (+,5) #endregion #region Prueba3 CalculadoraSimple cs = new CalculadoraSimple(); cs.Ejecuta(new Operacion('+', 5)); //operacion 1 cs.Undo(); //des-hace la operacion 1 cs.Undo(); //sin efecto, no existen instrucciones efectivas Console.WriteLine(cs.ResultadoActual()); //imprime 0 cs.Ejecuta(new Operacion('/', 0)); //lanza DivideByZeroException #endregion }