Finishing All Test
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing

The merge is comming soon I think
This commit is contained in:
Debucquoy Anthony 2023-03-30 18:11:36 +02:00
parent c7511827fb
commit 035fe5cb9e
Signed by: tonitch
GPG Key ID: A78D6421F083D42E
6 changed files with 94 additions and 63 deletions

View File

@ -19,7 +19,9 @@ repositories {
dependencies { dependencies {
// Use JUnit Jupiter for testing. // Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1' testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.9.2'
// This dependency is used by the application. // This dependency is used by the application.
implementation 'com.google.guava:guava:31.1-jre' implementation 'com.google.guava:guava:31.1-jre'

View File

@ -102,7 +102,7 @@ public class BinaryParser implements FileParser {
byte piece_count = levelData[2 + map_width * map_height / 8 + (map_height * map_width % 8 != 0 ? 1 : 0)]; byte piece_count = levelData[2 + map_width * map_height / 8 + (map_height * map_width % 8 != 0 ? 1 : 0)];
Piece[] ret = new Piece[piece_count]; Piece[] ret = new Piece[piece_count];
byte[] pieces_data = Arrays.copyOfRange(levelData, 3 + map_width * map_height / 8 + (map_height * map_width % 8 != 0 ? 1 : 0), levelData.length); byte[] pieces_data = Arrays.copyOfRange(levelData, 3 + map_width * map_height / 8 + (map_height * map_width % 8 != 0 ? 1 : 0), levelData.length);
byte[] pieces_positions = saved_data ? Arrays.copyOfRange(levelData, levelData.length - 1 - piece_count,levelData.length - 1): null; byte[] pieces_positions = saved_data ? Arrays.copyOfRange(levelData, levelData.length - piece_count*2,levelData.length ): null;
int piece_offset = 0; int piece_offset = 0;
for (int piece_index = 0; piece_index < piece_count; piece_index++) { for (int piece_index = 0; piece_index < piece_count; piece_index++) {
Vec2 _piece_size = Bitwise.ByteToNible(pieces_data[piece_index + piece_offset]); Vec2 _piece_size = Bitwise.ByteToNible(pieces_data[piece_index + piece_offset]);
@ -140,21 +140,22 @@ public class BinaryParser implements FileParser {
* @return byte array with each element compiled for file format * @return byte array with each element compiled for file format
*/ */
static byte[] BuildByteFromMatrix(boolean[][] shape){ static byte[] BuildByteFromMatrix(boolean[][] shape){
// TODO: 3/27/23 Problem with this function to investigate
int width = shape[0].length , height = shape.length; int width = shape[0].length , height = shape.length;
boolean[] list = new boolean[width * height]; boolean[] b_list = new boolean[width * height];
for (int x = 0; x < shape.length; x++) { for (int x = 0; x < shape.length; x++) {
for (int y = 0; y < shape[x].length; y++) { for (int y = 0; y < shape[x].length; y++) {
list[x * shape[x].length + y] = shape[x][y]; b_list[x * shape[x].length + y] = shape[x][y];
} }
} }
byte[] ret = new byte[width * height / 8 + width * height % 8 == 0 ? 0 : 1 ]; byte[] ret = new byte[width * height / 8 + (width * height % 8 == 0 ? 0 : 1)];
for (int i = 0; i < ret.length; i++) { for (int i = 0; i < ret.length; i++) {
byte b = 0; byte current_byte = 0;
for (int b_count = i * 8; b_count < (i * 8 + 8) % (i * 8 - ret.length); b_count++) { boolean[] current_byte_data = Arrays.copyOfRange(b_list, i * 8, i * 8 + 8);
b = (byte) ((b << 1) | (list[b_count] ? 1 : 0)); for (boolean curr_data: current_byte_data) {
current_byte = (byte) (current_byte << 1);
current_byte = (byte) (current_byte | (curr_data ? 1 : 0));
} }
ret[i] = b; ret[i] = current_byte;
} }
return ret; return ret;
} }

View File

@ -24,10 +24,6 @@ public class Piece extends Shape{
} }
public void setPosition(Vec2 position){ public void setPosition(Vec2 position){
if (linked_map == null) {
return;
}
this.Position = position; this.Position = position;
} }

View File

@ -1,10 +1,12 @@
package school_project; package school_project;
import java.io.Serializable;
/** /**
* This is used to represent a position/vector/... any ensemble of 2 elements that have to work together in * This is used to represent a position/vector/... any ensemble of 2 elements that have to work together in
* a plan. This way we can use some basic operations over them. * a plan. This way we can use some basic operations over them.
*/ */
public class Vec2 { public class Vec2 implements Serializable {
public int x, y; public int x, y;
public Vec2() { public Vec2() {
@ -16,4 +18,12 @@ public class Vec2 {
this.x = x; this.x = x;
this.y = y; this.y = y;
} }
@Override
public boolean equals(Object obj) {
if (obj instanceof Vec2 vec) {
return this.x == vec.x && this.y == vec.y;
}
return false;
}
} }

View File

@ -57,6 +57,19 @@ class BinaryParserTest {
} }
@Test
void BuildByteFromMatrix(){
byte[] map_data = Arrays.copyOfRange(file_data, 5, 9);
boolean[][] map_shape = {
{false, false, true, true, false, false},
{false, true, true, true, true, false},
{true, true, false, false, true, true},
{true, true, false, false, true, true},
{true, true, true, true, true, true},
};
assertArrayEquals(map_data, BinaryParser.BuildByteFromMatrix(map_shape));
}
@Test @Test
void BuildMatrixFromByte_map(){ void BuildMatrixFromByte_map(){
byte[] map_data = Arrays.copyOfRange(file_data, 5, 9); byte[] map_data = Arrays.copyOfRange(file_data, 5, 9);

View File

@ -1,94 +1,103 @@
package school_project.Parsers; package school_project.Parsers;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
import org.junit.jupiter.api.io.TempDir;
import school_project.Map; import school_project.Map;
import school_project.Piece; import school_project.Piece;
import school_project.Vec2;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
class FileParserFactoryTest { class FileParserFactoryTest {
static Map generateMapTest(){ static Map generateMapTest(){
boolean[][] map_shape = { boolean[][] map_shape = {
{true, true, true, true}, {false, false, true, true, false, false},
{true, false, true, true}, {false, true, true, true, true, false},
{true, true, false, true}, {true, true, false, false, true, true},
{true, true, false, false}, {true, true, false, false, true, true},
{true, true, true, true, true, true},
}; };
boolean[][] piece1_shape = { boolean[][] piece1_shape = {
{true, true}, {false, true},
{true, false},
{true, true},
{true, true}, {true, true},
}; };
boolean[][] piece2_shape = { boolean[][] piece2_shape = {
{true, true}, {true, false, false},
{true, true, false},
{false, true, true},
}; };
boolean[][] piece3_shape = { boolean[][] piece3_shape = {
{true, true}, {false, true, true},
{false, true}, {true, true, true},
}; };
Piece[] pieces = { new Piece(piece1_shape), new Piece(piece2_shape), new Piece(piece3_shape) }; boolean[][] piece4_shape = {
{true, true, false},
{true, true, false},
{true, true, true},
};
Piece[] pieces = { new Piece(piece1_shape), new Piece(piece2_shape), new Piece(piece3_shape), new Piece(piece4_shape) };
Map map = new Map(map_shape); Map map = new Map(map_shape);
map.addPiece(pieces); map.addPiece(pieces);
pieces[0].setPosition(new Vec2(1, 0));
pieces[1].setPosition(new Vec2(3, 0));
pieces[2].setPosition(new Vec2(3, 3));
pieces[3].setPosition(new Vec2(0, 2));
return map; return map;
} }
@Test @Test
void saveFileFromMap_Binary() throws IOException { void saveLoadFileFromMap_Binary(@TempDir Path tmpFolder) throws IOException {
Map map = generateMapTest(); Map map = generateMapTest();
FileParserFactory.saveFileFromMap(new File("TestBinaryLevel.level"), map); FileParserFactory.saveFileFromMap(tmpFolder.resolve("TestBinaryLevel.level").toFile(), map);
}
@Test Map testMap = FileParserFactory.loadMapFromFile(tmpFolder.resolve("TestBinaryLevel.level").toFile());
void saveFileFromMap_save_Binary() throws IOException {
Map map = generateMapTest();
FileParserFactory.saveFileFromMap(new File("TestBinarySave.slevel"), map);
}
@Test
void saveFileFromMap_Serialized() throws IOException {
Map map = generateMapTest();
FileParserFactory.saveFileFromMap(new File("TestSerializedLevel.serialized"), map);
}
@Test
void saveFileFromMap_save_Serialized() throws IOException{
Map map = generateMapTest();
FileParserFactory.saveFileFromMap(new File("TestSerializedSave.sserialized"), map);
}
@Test
void loadMapFromFile_Binary() throws IOException {
Map map = generateMapTest();
Map testMap = FileParserFactory.loadMapFromFile(new File("src/test/resources/saveFileExamples/TestBinaryLevel.level"));
assertArrayEquals(map.getCleanedMap().getShape(), testMap.getShape()); assertArrayEquals(map.getCleanedMap().getShape(), testMap.getShape());
assertTrue(map.getCleanedMap().getPieces().equals(testMap.getPieces())); for (int i = 0; i < map.getPieces().size(); i++) {
assertArrayEquals(map.getPieces().get(i).getShape(), testMap.getPieces().get(i).getShape());
}
} }
@Test @Test
void loadMapFromFile_saved_Binary() throws IOException { void saveLoadFileFromMap_save_Binary(@TempDir Path tmpFolder) throws IOException {
Map map = generateMapTest(); Map map = generateMapTest();
Map testMap = FileParserFactory.loadMapFromFile(new File("src/test/resources/saveFileExamples/TestBinarySave.slevel")); FileParserFactory.saveFileFromMap(tmpFolder.resolve("TestBinarySave.slevel").toFile(), map);
Map testMap = FileParserFactory.loadMapFromFile(tmpFolder.resolve("TestBinarySave.slevel").toFile());
assertArrayEquals(map.getShape(), testMap.getShape()); assertArrayEquals(map.getShape(), testMap.getShape());
assert(map.getPieces().equals(testMap.getPieces())); for (int i = 0; i < map.getPieces().size(); i++) {
assertArrayEquals(map.getPieces().get(i).getShape(), testMap.getPieces().get(i).getShape());
assertEquals(map.getPieces().get(i).getPosition(), testMap.getPieces().get(i).getPosition());
}
} }
@Test @Test
void loadMapFromFile_Serialized() throws IOException { void saveLoadFileFromMap_Serialized(@TempDir Path tmpFolder) throws IOException {
Map map = generateMapTest(); Map map = generateMapTest();
Map testMap = FileParserFactory.loadMapFromFile(new File("src/test/resources/saveFileExamples/TestSerializedLevel.serialized")); FileParserFactory.saveFileFromMap( tmpFolder.resolve("TestSerializedLevel.serialized").toFile(), map);
assertArrayEquals(map.getCleanedMap().getShape(), testMap.getShape());
assert(map.getCleanedMap().getPieces().equals(testMap.getPieces())); Map testMap = FileParserFactory.loadMapFromFile( tmpFolder.resolve("TestSerializedLevel.serialized").toFile());
assertArrayEquals(map.getShape(), testMap.getShape());
for (int i = 0; i < map.getPieces().size(); i++) {
assertArrayEquals(map.getPieces().get(i).getShape(), testMap.getPieces().get(i).getShape());
}
} }
@Test @Test
void loadMapFromFile_saved_Serialized() throws IOException { void saveLoadFileFromMap_save_Serialized(@TempDir Path tmpFolder) throws IOException{
Map map = generateMapTest(); Map map = generateMapTest();
Map testMap = FileParserFactory.loadMapFromFile(new File("src/test/resources/saveFileExamples/TestSerializedSave.sserialized")); FileParserFactory.saveFileFromMap(tmpFolder.resolve("TestSerializedSave.sserialized").toFile(), map);
Map testMap = FileParserFactory.loadMapFromFile(tmpFolder.resolve("TestSerializedSave.sserialized").toFile());
assertArrayEquals(map.getShape(), testMap.getShape()); assertArrayEquals(map.getShape(), testMap.getShape());
assertTrue(map.getPieces().equals(testMap.getPieces())); for (int i = 0; i < map.getPieces().size(); i++) {
assertArrayEquals(map.getPieces().get(i).getShape(), testMap.getPieces().get(i).getShape());
assertEquals(map.getPieces().get(i).getPosition(), testMap.getPieces().get(i).getPosition());
}
} }
} }