Commit cf6f4cab authored by RAHUL SHARMA's avatar RAHUL SHARMA

Add JUnit tests

parent 3afa32be
<component name="libraryTable">
<library name="Arquillian JUnit:Release" type="repository">
<properties maven-id="org.jboss.arquillian.junit:arquillian-junit-container:RELEASE" />
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/junit/arquillian-junit-container/1.2.0.Final/arquillian-junit-container-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/junit/arquillian-junit-core/1.2.0.Final/arquillian-junit-core-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/test/arquillian-test-api/1.2.0.Final/arquillian-test-api-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/core/arquillian-core-api/1.2.0.Final/arquillian-core-api-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/test/arquillian-test-spi/1.2.0.Final/arquillian-test-spi-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/core/arquillian-core-spi/1.2.0.Final/arquillian-core-spi-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/container/arquillian-container-test-api/1.2.0.Final/arquillian-container-test-api-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/shrinkwrap/shrinkwrap-api/1.2.6/shrinkwrap-api-1.2.6.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/container/arquillian-container-test-spi/1.2.0.Final/arquillian-container-test-spi-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/container/arquillian-container-spi/1.2.0.Final/arquillian-container-spi-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-api-base/2.0.0/shrinkwrap-descriptors-api-base-2.0.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/core/arquillian-core-impl-base/1.2.0.Final/arquillian-core-impl-base-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/test/arquillian-test-impl-base/1.2.0.Final/arquillian-test-impl-base-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/container/arquillian-container-impl-base/1.2.0.Final/arquillian-container-impl-base-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/config/arquillian-config-api/1.2.0.Final/arquillian-config-api-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/config/arquillian-config-impl-base/1.2.0.Final/arquillian-config-impl-base-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-spi/2.0.0/shrinkwrap-descriptors-spi-2.0.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/arquillian/container/arquillian-container-test-impl-base/1.2.0.Final/arquillian-container-test-impl-base-1.2.0.Final.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/shrinkwrap/shrinkwrap-impl-base/1.2.6/shrinkwrap-impl-base-1.2.6.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/shrinkwrap/shrinkwrap-spi/1.2.6/shrinkwrap-spi-1.2.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
This diff is collapsed.
...@@ -7,5 +7,16 @@ ...@@ -7,5 +7,16 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="JUnit4">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.12.jar!/" />
<root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="Arquillian JUnit:Release" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
...@@ -12,7 +12,7 @@ public class Matcher { ...@@ -12,7 +12,7 @@ public class Matcher {
if (!t1.getStock().equals(t2.getStock())) { if (!t1.getStock().equals(t2.getStock())) {
return MatchType.NO_MATCH; return MatchType.NO_MATCH;
} }
if (!t1.getTypeOfRequest().equals(t2.getTypeOfRequest())) { if (t1.getTypeOfRequest().equals(t2.getTypeOfRequest())) {
return MatchType.NO_MATCH; return MatchType.NO_MATCH;
} }
//current trans is sell //current trans is sell
......
import java.io.*; import java.io.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer; import java.util.StringTokenizer;
public class StockExchange { public class StockExchange {
public void run() throws IOException { public ArrayList<Transaction> run(ArrayList<String> inputStrings) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Matcher matcher = new Matcher(); Matcher matcher = new Matcher();
boolean shouldContinue = true; boolean shouldContinue = true;
ArrayList<Transaction> transactionList = new ArrayList<>(); ArrayList<Transaction> transactionList = new ArrayList<>();
int inputIndex = 0;
while (shouldContinue) { while (shouldContinue && inputIndex < inputStrings.size()) {
// get/parse user input // get/parse user input
Transaction currentTransaction = new Transaction(); Transaction currentTransaction = new Transaction();
System.out.println("New Transacrion: \"Time Quantity Price Customer_Id Stock Type\" "); System.out.println("New Transacrion: \"Time Quantity Price Customer_Id Stock Type\" ");
String inputString = reader.readLine(); String inputString = inputStrings.get(inputIndex);
StringTokenizer stringTokenizer = new StringTokenizer(inputString); inputIndex++;
if (stringTokenizer.hasMoreTokens()) { currentTransaction = getTransaction(inputString);
currentTransaction.setTime(Integer.parseInt(stringTokenizer.nextToken()));
currentTransaction.setQuantity(Integer.parseInt(stringTokenizer.nextToken()));
currentTransaction.setPricePerUnit(Float.parseFloat(stringTokenizer.nextToken()));
currentTransaction.setCustomerId(stringTokenizer.nextToken());
currentTransaction.setStock(stringTokenizer.nextToken());
currentTransaction.setTypeOfRequest(stringTokenizer.nextToken());
}
if (!transactionList.isEmpty()) { if (!transactionList.isEmpty()) {
...@@ -35,27 +30,26 @@ public class StockExchange { ...@@ -35,27 +30,26 @@ public class StockExchange {
if (matchType == Matcher.MatchType.FULL_MATCH) { if (matchType == Matcher.MatchType.FULL_MATCH) {
// modify ith transaction // modify ith transaction
transactionList.get(i).setQuantity(transactionList.get(i).getQuantity() - currentTransaction.getQuantity() ); transactionList.get(i).setQuantity(transactionList.get(i).getQuantity() - currentTransaction.getQuantity());
if(transactionList.get(i).getQuantity() == 0){ if (transactionList.get(i).getQuantity() == 0) {
transactionList.remove(i); transactionList.remove(i);
} }
System.out.println(currentTransaction.getCustomerId()+" successfully traded "+ transactionList.get(i).getQuantity()+" stocks with "+transactionList.get(i).getCustomerId()); System.out.println(currentTransaction.getCustomerId() + " successfully traded " + transactionList.get(i).getQuantity() + " stocks with " + transactionList.get(i).getCustomerId());
break; break;
} else if (matchType == Matcher.MatchType.PARTIAL_MATCH) { } else if (matchType == Matcher.MatchType.PARTIAL_MATCH) {
// modify current Transaction // modify current Transaction
// drop i'th transaction // drop i'th transaction
currentTransaction.setQuantity(currentTransaction.getQuantity() - transactionList.get(i).getQuantity()); currentTransaction.setQuantity(currentTransaction.getQuantity() - transactionList.get(i).getQuantity());
transactionList.remove(i); transactionList.remove(i);
System.out.println(currentTransaction.getCustomerId()+" successfully traded "+ transactionList.get(i).getQuantity()+" stocks with "+transactionList.get(i).getCustomerId()); System.out.println(currentTransaction.getCustomerId() + " successfully traded " + transactionList.get(i).getQuantity() + " stocks with " + transactionList.get(i).getCustomerId());
} else if (matchType == Matcher.MatchType.NO_MATCH) { } else if (matchType == Matcher.MatchType.NO_MATCH) {
// move on // move on
continue;
} }
if(i == transactionList.size()-1 && currentTransaction.getQuantity() > 0) { if (i == transactionList.size() - 1 && currentTransaction.getQuantity() > 0) {
transactionList.add(currentTransaction); transactionList.add(currentTransaction);
sortTransactions(transactionList);
break;
} }
...@@ -63,16 +57,48 @@ public class StockExchange { ...@@ -63,16 +57,48 @@ public class StockExchange {
} else { } else {
// add this transaction if list is empty // add this transaction if list is empty
transactionList.add(currentTransaction); transactionList.add(currentTransaction);
} sortTransactions(transactionList);
System.out.println("Do you want to continue? y|n"); // System.out.print(transactionList);
String userResponseString = reader.readLine();
if (userResponseString.equals("n")) {
shouldContinue = false;
} }
// System.out.println("Do you want to continue? y|n");
// String userResponseString = reader.readLine();
// if (userResponseString.equals("n")) {
// shouldContinue = false;
// }
} }
return transactionList;
}
public void sortTransactions(ArrayList<Transaction> transactionList) {
Collections.sort(transactionList, new Comparator<Transaction>() {
@Override
public int compare(Transaction o1, Transaction o2) {
if (o1.getTime() == o2.getTime()) {
return 0;
} else if (o1.getTime() > o2.getTime()) {
return 1;
} else {
return -1;
}
}
});
}
public Transaction getTransaction(String inputString) {
Transaction currentTransaction = new Transaction();
StringTokenizer stringTokenizer = new StringTokenizer(inputString);
if (stringTokenizer.hasMoreTokens()) {
currentTransaction.setTime(Integer.parseInt(stringTokenizer.nextToken()));
currentTransaction.setQuantity(Integer.parseInt(stringTokenizer.nextToken()));
currentTransaction.setPricePerUnit(Float.parseFloat(stringTokenizer.nextToken()));
currentTransaction.setCustomerId(stringTokenizer.nextToken());
currentTransaction.setStock(stringTokenizer.nextToken());
currentTransaction.setTypeOfRequest(stringTokenizer.nextToken());
}
return currentTransaction;
} }
} }
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import static org.junit.Assert.*;
public class StockExchangeTest {
private StockExchange stockExchange;
@Before
public void setUp() throws Exception {
stockExchange = new StockExchange();
}
@After
public void tearDown() throws Exception {
}
@Test
public void run() throws IOException {
ArrayList<String> testStrings = new ArrayList<String>();
testStrings.add("1 20 300 C8 Apple Sell");
testStrings.add("10 35 200 C9 Moto Buy");
testStrings.add("9 20 400 C5 Jio Sell");
testStrings.add("7 30 300 C7 Moto Sell");
testStrings.add("8 20 250 C7 Moto Buy");
testStrings.add("2 25 400 C6 Jio Buy");
testStrings.add("12 25 400 C6 Apple Buy");
ArrayList<Transaction> actualList = new ArrayList<>();
// actualList.add(stockExchange.getTransaction("1 20 300 C8 Apple Sell"));
actualList.add(stockExchange.getTransaction("2 5 400 C6 Jio Buy"));
actualList.add(stockExchange.getTransaction("7 30 300 C7 Moto Sell"));
actualList.add(stockExchange.getTransaction("8 20 250 C7 Moto Buy"));
actualList.add(stockExchange.getTransaction("10 35 200 C9 Moto Buy"));
actualList.add(stockExchange.getTransaction("12 5 400 C6 Apple Buy"));
ArrayList<Transaction> resultList = stockExchange.run(testStrings);
for (int i = 0; i < resultList.size(); i++) {
assertEquals(resultList.get(i), actualList.get(i));
}
}
}
\ No newline at end of file
import java.io.IOException;
public class TestStockExchange {
public static void main(String[] args) throws IOException {
StockExchange stockExchange = new StockExchange();
stockExchange.run();
}
}
import java.util.Comparator; import java.util.Comparator;
import java.util.Objects;
public class Transaction implements Comparator<Transaction> { public class Transaction {
private int time; private int time;
private int quantity; private int quantity;
...@@ -9,7 +10,26 @@ public class Transaction implements Comparator<Transaction> { ...@@ -9,7 +10,26 @@ public class Transaction implements Comparator<Transaction> {
private String stock; private String stock;
private String typeOfRequest; private String typeOfRequest;
private int getTime() { @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Transaction that = (Transaction) o;
return time == that.time &&
quantity == that.quantity &&
Float.compare(that.pricePerUnit, pricePerUnit) == 0 &&
Objects.equals(customerId, that.customerId) &&
Objects.equals(stock, that.stock) &&
Objects.equals(typeOfRequest, that.typeOfRequest);
}
@Override
public int hashCode() {
return Objects.hash(time, quantity, pricePerUnit, customerId, stock, typeOfRequest);
}
public int getTime() {
return time; return time;
} }
...@@ -69,18 +89,5 @@ public class Transaction implements Comparator<Transaction> { ...@@ -69,18 +89,5 @@ public class Transaction implements Comparator<Transaction> {
'}'; '}';
} }
// add comparator
@Override
public int compare(Transaction o1, Transaction o2) {
if(o1.getTime() == o2.getTime()){
return 0;
}
else if(o1.getTime() > o2.getTime()){
return 1;
}
else {
return -1;
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment