package kernel.test; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import kernel.Cell; import kernel.exception.CreateCycleException; import kernel.exception.InvalidIntervalLineColumnEception; import kernel.function.Average; import kernel.function.Sum; import kernel.operation.Addition; public class CellTest { @org.junit.Test public void CreateCellValueTest() throws InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); assertEquals(A1.getValue(),25.,0); assertEquals(A1.containFormula(),false); assertEquals(A1.getUsedIn().size(),0); assertEquals(A1.getId(),"A1"); } @org.junit.Test public void CreateCellBinaryOperationTest() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,35.); Cell A3= new Cell("A",3,new Addition(A1,A2)); assertEquals(A3.getValue(),60.,0); assertEquals(A3.containFormula(),true); assertEquals(A3.getUsedIn().size(),0); assertEquals(A3.getId(),"A3"); assertEquals(A3.toString(),"A1+A2"); assertEquals(A1.getUsedIn().size(),1); assertEquals(A2.getUsedIn().size(),1); } @org.junit.Test public void CreateCellFunctionTest() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,35.); Cell A3= new Cell("A",3,new Addition(A1,A2)); Cell A5= new Cell("A",5,45.); List sumList = new ArrayList<>(); sumList.add(A1); sumList.add(A2); sumList.add(A3); sumList.add(A5); Cell A4= new Cell("A",4,new Sum(sumList)); assertEquals(A4.getValue(),165.,0); assertEquals(A4.containFormula(),true); assertEquals(A4.getUsedIn().size(),0); assertEquals(A4.toString(),"SOMME(A1,A2,A3,A5)"); assertEquals(A4.getDevelopedFormula(),"SOMME(A1,A2,(A1+A2),A5)"); assertEquals(A1.getUsedIn().size(),2); assertEquals(A2.getUsedIn().size(),2); assertEquals(A3.getUsedIn().size(),1); assertEquals(A5.getUsedIn().size(),1); } @org.junit.Test public void ModifyCellValueTest() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,35.); Cell A3= new Cell("A",3,new Addition(A1,A2)); assertEquals(A1.getValue(),25.,0); assertEquals(A2.getValue(),35.,0); assertEquals(A3.getValue(),60.,0); A1.setValue(45.); assertEquals(A1.getValue(),45.,0); assertEquals(A3.getValue(),80.,0); } @org.junit.Test public void ModifyCellFormulaTest() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,35.); Cell A3= new Cell("A",3,new Addition(A1,A2)); Cell A5= new Cell("A",5,45.); List sumList = new ArrayList<>(); sumList.add(A1); sumList.add(A2); sumList.add(A3); sumList.add(A5); Cell A4= new Cell("A",4,new Sum(sumList)); assertEquals(A4.getValue(),165.,0); assertEquals(A4.containFormula(),true); assertEquals(A4.getUsedIn().size(),0); assertEquals(A1.getUsedIn().size(),2); assertEquals(A2.getUsedIn().size(),2); assertEquals(A3.getUsedIn().size(),1); assertEquals(A5.getUsedIn().size(),1); assertEquals(A1.containFormula(),false); A1.setFormula(new Addition(A2,A5)); assertEquals(A1.containFormula(),true); assertEquals(A1.getValue(),80.,0); assertEquals(A3.getValue(),115.,0); assertEquals(A4.getValue(),275.,0); assertEquals(A1.toString(),"A2+A5"); assertEquals(A1.getDevelopedFormula(),"(A2+A5)"); assertEquals(A4.toString(),"SOMME(A1,A2,A3,A5)"); assertEquals(A4.getDevelopedFormula(),"SOMME((A2+A5),A2,((A2+A5)+A2),A5)"); assertEquals(A1.getUsedIn().size(),2); assertEquals(A2.getUsedIn().size(),3); assertEquals(A3.getUsedIn().size(),1); assertEquals(A5.getUsedIn().size(),2); } @org.junit.Test(expected=CreateCycleException.class) public void DirectCycleBynaryOperation() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,35.); try{ A1.setFormula(new Addition(A1,A2)); } catch(CreateCycleException ex){ throw ex; } } @org.junit.Test(expected=CreateCycleException.class) public void DirectCycleFunction() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A2= new Cell("A",2,25.); Cell B2= new Cell("B",2,35.); Cell A3= new Cell("A",3,0.5); List sumList = new ArrayList<>(); sumList.add(A2); sumList.add(B2); sumList.add(A3); try{ B2.setFormula(new Sum(sumList)); } catch(CreateCycleException ex){ throw ex; } } @org.junit.Test(expected=CreateCycleException.class) public void IndirectCycle() throws CreateCycleException, InvalidIntervalLineColumnEception { Cell A1= new Cell("A",1,25.); Cell A2= new Cell("A",2,5.); Cell B4= new Cell("B",4,new Addition(A1,A2)); Cell A4= new Cell("A",4,0.); Cell A3= new Cell("A",3,0.5); Cell B2= new Cell("B",2,12.); List sumList = new ArrayList<>(); sumList.add(A2); sumList.add(B2); sumList.add(A3); Cell B6= new Cell("B",6,new Sum(sumList)); List averageList = new ArrayList<>(); averageList.add(B6); averageList.add(B4); averageList.add(A4); Cell C6= new Cell("C",6,new Average(averageList)); try{ B2.setFormula(new Addition(A1,C6)); } catch(CreateCycleException ex){ throw ex; } } }