Skip to content

Commit 9b812d5

Browse files
committed
Add ADTFraction class for arithmetic operations on fractions
1 parent d717ca4 commit 9b812d5

File tree

1 file changed

+21
-68
lines changed

1 file changed

+21
-68
lines changed
Lines changed: 21 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,33 @@
11
package com.thealgorithms.maths;
22

3-
public record ADTFraction(int numerator, int denominator) {
4-
/**
5-
* Initializes a newly created {@code ADTFraction} object so that it represents
6-
* a fraction with the {@code numerator} and {@code denominator} provided as arguments.
7-
*
8-
* @param numerator The fraction numerator
9-
* @param denominator The fraction denominator
10-
*/
11-
public ADTFraction {
12-
if (denominator == 0) {
13-
throw new IllegalArgumentException("Denominator cannot be 0");
14-
}
15-
}
16-
17-
/**
18-
* Add two fractions.
19-
*
20-
* @param fraction the {@code ADTFraction} to add
21-
* @return A new {@code ADTFraction} containing the result of the operation
22-
*/
23-
public ADTFraction plus(ADTFraction fraction) {
24-
var numerator = this.denominator * fraction.numerator + this.numerator * fraction.denominator;
25-
var denominator = this.denominator * fraction.denominator;
26-
return new ADTFraction(numerator, denominator);
27-
}
3+
import static org.junit.jupiter.api.Assertions.*;
4+
import org.junit.jupiter.api.Test;
285

29-
/**
30-
* Multiply fraction by a number.
31-
*
32-
* @param number the number to multiply
33-
* @return A new {@code ADTFraction} containing the result of the operation
34-
*/
35-
public ADTFraction times(int number) {
36-
return times(new ADTFraction(number, 1));
37-
}
6+
public class ADTFractionTest {
387

39-
/**
40-
* Multiply two fractions.
41-
*
42-
* @param fraction the {@code ADTFraction} to multiply
43-
* @return A new {@code ADTFraction} containing the result of the operation
44-
*/
45-
public ADTFraction times(ADTFraction fraction) {
46-
var numerator = this.numerator * fraction.numerator;
47-
var denominator = this.denominator * fraction.denominator;
48-
return new ADTFraction(numerator, denominator);
8+
@Test
9+
void testAddition() {
10+
ADTFraction a = new ADTFraction(1, 2);
11+
ADTFraction b = new ADTFraction(1, 3);
12+
assertEquals(new ADTFraction(5, 6), a.plus(b));
4913
}
5014

51-
/**
52-
* Generates the reciprocal of the fraction.
53-
*
54-
* @return A new {@code ADTFraction} with the {@code numerator} and {@code denominator} switched
55-
*/
56-
public ADTFraction reciprocal() {
57-
return new ADTFraction(this.denominator, this.numerator);
15+
@Test
16+
void testMultiplication() {
17+
ADTFraction a = new ADTFraction(2, 3);
18+
ADTFraction b = new ADTFraction(3, 4);
19+
assertEquals(new ADTFraction(1, 2), a.times(b)); // simplified to 1/2
5820
}
5921

60-
/**
61-
* Calculates the result of the fraction.
62-
*
63-
* @return The numerical result of the division between {@code numerator} and {@code
64-
* denominator}
65-
*/
66-
public float value() {
67-
return (float) this.numerator / this.denominator;
22+
@Test
23+
void testReciprocal() {
24+
ADTFraction a = new ADTFraction(3, 4);
25+
assertEquals(new ADTFraction(4, 3), a.reciprocal());
6826
}
6927

70-
/**
71-
* Returns a string representation of this {@code ADTFraction} in the format
72-
* {@code numerator}/{@code denominator}.
73-
*
74-
* @return A string representation of this {@code ADTFraction}
75-
*/
76-
@Override
77-
public String toString() {
78-
return String.format("%d/%d", this.numerator, this.denominator);
28+
@Test
29+
void testSimplification() {
30+
ADTFraction a = new ADTFraction(2, 4);
31+
assertEquals(new ADTFraction(1, 2), a);
7932
}
8033
}

0 commit comments

Comments
 (0)