Skip to content

Commit

Permalink
Добавлена троичная система счисления
Browse files Browse the repository at this point in the history
  • Loading branch information
kalenchukov committed Aug 7, 2022
1 parent efec290 commit 504a494
Show file tree
Hide file tree
Showing 7 changed files with 207 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
## Поддерживаемые системы счисления

* Двоичная
* Троичная
* Римская
* Восьмеричная
* Десятеричная
Expand Down
1 change: 0 additions & 1 deletion TODO.MD
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,5 @@
[x] - не делать

# CORE
* [>] Добавить троичную систему счисления
* [?] Метод для проверки является ли строка записью в указанной системе счисления
*
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<groupId>dev.kalenchukov</groupId>
<artifactId>numeral-system</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>

<name>NumeralSystem</name>
<description>Системы счисления</description>
Expand Down
73 changes: 73 additions & 0 deletions src/main/java/dev/kalenchukov/numeralsystem/TernarySystem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Copyright © 2022 Алексей Каленчуков
* GitHub: https://github.com/kalenchukov
* E-mail: mailto:aleksey.kalenchukov@yandex.ru
*/

package dev.kalenchukov.numeralsystem;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

import java.util.List;
import java.util.Objects;

/**
* Класс троичной системы счисления.
*/
public class TernarySystem extends AbstractSystem
{
/**
* Цифры.
*/
@Unmodifiable
@NotNull
public static final List<@NotNull Character> DIGITS = List.of(
'\u0030', '\u0031', '\u0032'
);

/**
* Конструктор для {@code TernarySystem}.
*/
public TernarySystem()
{
super(DIGITS);
}

/**
* @see Object#equals(Object)
*/
@Override
public boolean equals(@Nullable final Object obj)
{
if (obj == null) {
return false;
}

if (this == obj) {
return true;
}

if (this.getClass() != obj.getClass()) {
return false;
}

final TernarySystem numeralSystem = (TernarySystem) obj;

if (!Objects.equals(TernarySystem.DIGITS, numeralSystem.get())) {
return false;
}

return true;
}

/**
* @see Object#hashCode()
*/
@Override
public int hashCode()
{
return TernarySystem.DIGITS.hashCode();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ public enum NumeralSystem
*/
BINARY(BinarySystem.DIGITS),

/**
* Троичная система счисления.
*/
TERNARY(TernarySystem.DIGITS),

/**
* Римская система счисления.
*/
Expand Down
114 changes: 114 additions & 0 deletions src/test/java/dev/kalenchukov/numeralsystem/TernarySystemTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/*
* Copyright © 2022 Алексей Каленчуков
* GitHub: https://github.com/kalenchukov
* E-mail: mailto:aleksey.kalenchukov@yandex.ru
*/

package dev.kalenchukov.numeralsystem;

import org.jetbrains.annotations.NotNull;
import org.junit.Test;

import java.util.List;

import static org.junit.Assert.*;

public class TernarySystemTest
{
@NotNull
public static final Numerable NUMERAL_SYSTEM = new TernarySystem();

/**
* Проверка цифр.
*/
@Test
public void testGet()
{
List<Character> digits = List.of(
'0', '1', '2'
);

assertArrayEquals(digits.toArray(), NUMERAL_SYSTEM.get().toArray());
}

/**
* Проверка с содержащейся цифрой.
*/
@Test
public void testContains()
{
assertTrue(NUMERAL_SYSTEM.contains('2'));
}

/**
* Проверка с не содержащейся цифрой.
*/
@Test
public void testContainsNot()
{
assertFalse(NUMERAL_SYSTEM.contains('3'));
}

/**
* Проверка получения массива цифр.
*/
@Test
public void testToArray()
{
Character[] digits = new Character[] {
'0', '1', '2'
};

assertArrayEquals(digits, NUMERAL_SYSTEM.toArray());
}

/**
* Проверка преобразования цифр в строку с разделителем.
*/
@Test
public void testToStringSeparator()
{
String string = "0,1,2";

assertEquals(string, NUMERAL_SYSTEM.toString(","));
}

/**
* Проверка преобразования цифр в строку.
*/
@Test
public void testToString()
{
String string = "012";

assertEquals(string, NUMERAL_SYSTEM.toString());
}

/**
* Проверка сравнения объектов.
*/
@Test
public void testEquals()
{
assertFalse(NUMERAL_SYSTEM.equals(null));

assertTrue(NUMERAL_SYSTEM.equals(NUMERAL_SYSTEM));

assertFalse(NUMERAL_SYSTEM.equals(new BinarySystem()));

assertTrue(NUMERAL_SYSTEM.equals(new TernarySystem()));
}

/**
* Проверка хэш-кода.
*/
@Test
public void testHashCode()
{
assertEquals(NUMERAL_SYSTEM.hashCode(), NUMERAL_SYSTEM.hashCode());

assertEquals(NUMERAL_SYSTEM.hashCode(), new TernarySystem().hashCode());

assertNotEquals(NUMERAL_SYSTEM.hashCode(), new BinarySystem().hashCode());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,19 @@ public void testBinary()
assertArrayEquals(digits.toArray(), NumeralSystem.BINARY.get().toArray());
}

/**
* Проверка получения цифр.
*/
@Test
public void testTernary()
{
List<Character> digits = List.of(
'0', '1', '2'
);

assertArrayEquals(digits.toArray(), NumeralSystem.TERNARY.get().toArray());
}

/**
* Проверка получения цифр.
*/
Expand Down

0 comments on commit 504a494

Please sign in to comment.