diff --git a/.classpath b/.classpath index fceb480..63b7e89 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - - - - - - + + + + + + diff --git a/.gitignore b/.gitignore index 539bdba..ab469c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,56 +1,57 @@ -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet \ No newline at end of file +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +*.class +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet diff --git a/.project b/.project index a91a890..5e04e8b 100644 --- a/.project +++ b/.project @@ -1,17 +1,17 @@ - - - GitAssignmentObserver - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - + + + GitAssignmentObserver + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..8399825 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: bash +install: true +jdk: orcalejdk13 +before_script: cd src +script: +- javac MainTest.java +- java MainTest + diff --git a/src/CircleArea.java b/src/CircleArea.java new file mode 100644 index 0000000..987ffcf --- /dev/null +++ b/src/CircleArea.java @@ -0,0 +1,22 @@ +public class CircleArea extends ThreadSubscriber implements ObserverTest { + double input; + + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Area of the circle is "+execute()+" in centimetres squared"); + + } + + @Override + public String execute() { + String res = String.valueOf(3.14159265359*input*input); + return res; + } + + @Override + public Boolean test() { + input = 1; + return execute().equals("3.14159265359"); + } +} diff --git a/src/CircleCircumference.java b/src/CircleCircumference.java new file mode 100644 index 0000000..facf2e5 --- /dev/null +++ b/src/CircleCircumference.java @@ -0,0 +1,21 @@ +public class CircleCircumference extends ThreadSubscriber implements ObserverTest { + double input; + + @Override + public void notifySubscriber() + { + input = topic.getInput(); + System.out.println("Circle Circumference: " + execute()); + } + + @Override + public String execute() { + return String.valueOf(2 * input * 3.14); + } + + @Override + public Boolean test() { + input = 0.5; + return execute().equals("3.14"); + } +} diff --git a/src/CircleVolum.java b/src/CircleVolum.java new file mode 100644 index 0000000..43afcd1 --- /dev/null +++ b/src/CircleVolum.java @@ -0,0 +1,27 @@ +public class CircleVolum extends ThreadSubscriber implements ObserverTest +{ + double input; + + public void notifySubscriber() { + input=topic.getInput(); + System.out.println("Volume = " + execute()); + } +@Override + public String execute() + { + double volume= (4*22*input*input*input)/(3*7); + + String result=String.valueOf(volume); + + return result; + } +@Override +public Boolean test() { + input = 5; + if (execute().equals("523.8095238095239")) + return true; + else + return false; + +} +} \ No newline at end of file diff --git a/src/Fibonacci.java b/src/Fibonacci.java new file mode 100644 index 0000000..3b742dc --- /dev/null +++ b/src/Fibonacci.java @@ -0,0 +1,39 @@ +public class Fibonacci extends ThreadSubscriber implements ObserverTest { + double input; + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Result of Fibonacci series at "+input+": "+execute()); + } + @Override + public String execute() { + int num1 = 0; + int num2 = 1; + int sum = 0; + if(input<=1) + sum = (int)input; + for(int i=1 ; i < input ; i++) { + sum = num1 + num2; + num1 = num2; + num2 = sum; + } + String str = String.valueOf(sum); + + return str; + } + @Override + + public Boolean test() { + input = 4; + if(!execute().equals("3")) { + return false; + } + input = 10; + if(!execute().equals("55")) { + return false; + } + return true; + + } +} + diff --git a/src/ISubscriber.java b/src/ISubscriber.java index d3a605c..0ef7b4b 100644 --- a/src/ISubscriber.java +++ b/src/ISubscriber.java @@ -1,4 +1,5 @@ public interface ISubscriber { - public abstract void notifySubscriber(String input); + public abstract void notifySubscriber(); + public abstract String execute(); } diff --git a/src/LucasSeries.java b/src/LucasSeries.java new file mode 100644 index 0000000..bdf91c9 --- /dev/null +++ b/src/LucasSeries.java @@ -0,0 +1,30 @@ +public class LucasSeries extends ThreadSubscriber implements ObserverTest { + double input; + + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Lucas Series of " + (int) input + " = " + execute()); + } + + @Override + public String execute() { + if ((int) input == 0) + return "2"; + + int fn_2 = 2, fn_1 = 1; + for (int i = 2; i <= (int) input; ++i) { + int temp = fn_1; + fn_1 = fn_1 + fn_2; + fn_2 = temp; + } + + return String.valueOf(fn_1); + } + + @Override + public Boolean test() { + input = 5; + return execute().equals("11"); + } +} \ No newline at end of file diff --git a/src/Main.java b/src/Main.java index 9b8c2b0..f96f1c1 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,17 +1,30 @@ -import java.util.Scanner; - -public class Main { - private static ISubscriber subscribers [] = { - new SimpleSubscriber(), - new ReallySimpleSubscriber(), - }; - public static void main(String[] args) { - Topic mathTopic = new Topic(); - for (ISubscriber sub : subscribers) { - mathTopic.addSubscriber(sub); - } - Scanner sc = new Scanner(System.in); - String input = sc.next(); - mathTopic.dispatchEvent(input); - } -} +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) { + while(true) { + ThreadSubscriber subscribers [] = { + new SphereArea() , + new CircleArea(), + new CircleCircumference(), + new SummationSeries(), + new MultiplicationSeries(), + new CircleVolum(), + new LucasSeries(), + new Fibonacci(), + new twoPowerN() + }; + + Topic mathTopic = new Topic(); + for (ThreadSubscriber sub : subscribers) { + mathTopic.addSubscriber(sub); + sub.setTopic(mathTopic); + } + Scanner sc = new Scanner(System.in); + double input = sc.nextDouble(); + mathTopic.setInput(input); + mathTopic.dispatchEvent(); + } + } +} diff --git a/src/MainTest.java b/src/MainTest.java new file mode 100644 index 0000000..cc821cb --- /dev/null +++ b/src/MainTest.java @@ -0,0 +1,24 @@ +public class MainTest { + private static ObserverTest subscribers [] = { + new SphereArea() , + new CircleArea(), + new CircleCircumference(), + new SummationSeries(), + new MultiplicationSeries(), + new CircleVolum(), + new LucasSeries(), + new Fibonacci(), + new twoPowerN() + + }; + + public static void main(String[] args) { + for (ObserverTest sub : subscribers){ + Boolean res = sub.test(); + if(res!=null && res==false){ + System.exit(1); + } + } + } +} + diff --git a/src/MultiplicationSeries.java b/src/MultiplicationSeries.java new file mode 100644 index 0000000..c458512 --- /dev/null +++ b/src/MultiplicationSeries.java @@ -0,0 +1,29 @@ +public class MultiplicationSeries extends ThreadSubscriber implements ObserverTest { + double input; + + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Factorial of "+input+": "+execute()); + } + + @Override + public String execute() { + int fact = 1; + for(int i = 1; i<= input; i++) + fact*=i; + String res = String.valueOf(fact); + return res; + } + + @Override + public Boolean test() { + input = 1; + if(!execute().equals("1")) + return false; + input=5; + if(!execute().equals("120")) + return false; + return true; + } +} diff --git a/src/ObserverTest.java b/src/ObserverTest.java new file mode 100644 index 0000000..d4240f9 --- /dev/null +++ b/src/ObserverTest.java @@ -0,0 +1,3 @@ +public interface ObserverTest { + Boolean test(); +} diff --git a/src/ReallySimpleSubscriber.java b/src/ReallySimpleSubscriber.java deleted file mode 100644 index fb1114a..0000000 --- a/src/ReallySimpleSubscriber.java +++ /dev/null @@ -1,8 +0,0 @@ - -public class ReallySimpleSubscriber implements ISubscriber { - @Override - public void notifySubscriber(String input) { - // TODO Auto-generated method stub - System.out.println("Hello, I am really a simple subscriber and I am notified with " + input); - } -} diff --git a/src/SimpleSubscriber.java b/src/SimpleSubscriber.java deleted file mode 100644 index 5b0e4aa..0000000 --- a/src/SimpleSubscriber.java +++ /dev/null @@ -1,10 +0,0 @@ - -public class SimpleSubscriber implements ISubscriber { - - @Override - public void notifySubscriber(String input) { - // TODO Auto-generated method stub - System.out.println("Hello, I am a simple subscriber and I am notified with " + input); - } - -} diff --git a/src/SphereArea.java b/src/SphereArea.java new file mode 100644 index 0000000..613b41d --- /dev/null +++ b/src/SphereArea.java @@ -0,0 +1,26 @@ +public class SphereArea extends ThreadSubscriber implements ObserverTest{ + double input; + double Area; + String res; + + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Sphere area = " + execute()); + } + @Override + public String execute(){ + Area = 4*3.14*input*input; + res=""+Area; + return res; + } + @Override + public Boolean test(){ + input = 1; + + if(!execute().equals("12.56")) { + return false; + } + return true; + } +} diff --git a/src/SummationSeries.java b/src/SummationSeries.java new file mode 100644 index 0000000..6360abc --- /dev/null +++ b/src/SummationSeries.java @@ -0,0 +1,23 @@ +public class SummationSeries extends ThreadSubscriber implements ObserverTest { + double input; + + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("The sum of the first "+ (int) input +" numbers equals "+ execute()); + } + + @Override + public String execute() { + int sum = 0; + for (int i = 1 ; i <= input ; i++) + sum += i; + return String.valueOf(sum); + } + + @Override + public Boolean test() { + input = 3; + return (execute().equals("6")); + } +} \ No newline at end of file diff --git a/src/ThreadSubscriber.java b/src/ThreadSubscriber.java new file mode 100644 index 0000000..5b06e74 --- /dev/null +++ b/src/ThreadSubscriber.java @@ -0,0 +1,24 @@ +public abstract class ThreadSubscriber extends Thread implements ISubscriber { + Topic topic; + + public ThreadSubscriber(){ + + } + + public Topic getTopic() { + return topic; + } + + public void setTopic(Topic topic) { + this.topic = topic; + } + + @Override + public abstract void notifySubscriber(); + public abstract String execute(); + + @Override + public void run() { + notifySubscriber(); + } +} diff --git a/src/Topic.java b/src/Topic.java index 8fa2e2e..39bd8bb 100644 --- a/src/Topic.java +++ b/src/Topic.java @@ -3,23 +3,32 @@ public class Topic { - private List subscribers; + private List subscribers; + double input; public Topic() { - subscribers = new ArrayList(); + subscribers = new ArrayList(); } - public void addSubscriber(ISubscriber sub) { + public void addSubscriber(ThreadSubscriber sub) { subscribers.add(sub); } - public List getSubscribers() { + public List getSubscribers() { return subscribers; } - - public void dispatchEvent(String input) { - for (ISubscriber sub : this.getSubscribers()) { - sub.notifySubscriber(input); + + public double getInput() { + return input; + } + + public void setInput(double input) { + this.input = input; + } + + public void dispatchEvent() { + for (ThreadSubscriber sub : this.getSubscribers()) { + sub.start(); } } } diff --git a/src/twoPowerN.java b/src/twoPowerN.java new file mode 100644 index 0000000..15cbb58 --- /dev/null +++ b/src/twoPowerN.java @@ -0,0 +1,36 @@ + + +public class twoPowerN extends ThreadSubscriber implements ObserverTest { + double input; + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("2 Power of "+input+ "=" +execute() ); + } + @Override + public String execute(){ + int x=2; + double res =Math.pow( x, input ); + String result=String.valueOf(res); + return result; + } + + @Override + public Boolean test() { + input=2; + if(!execute().equals("4.0")) + + + return false; + + else + + return true; + + + } + + + +} + +