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;
+
+
+ }
+
+
+
+}
+
+