package squidpony;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import squidpony.squidgrid.Direction;
import squidpony.squidgrid.mapping.SpillWorldMap;
import squidpony.squidmath.GreasedRegion;
import squidpony.squidmath.ProbabilityTable;
import squidpony.squidmath.StatefulRNG;
import squidpony.squidmath.ThunderRNG;
import java.util.Arrays;
import java.util.EnumMap;
/**
* Just a test.
* Created by Tommy Ettinger on 9/17/2016.
*/
public class SquidStorageTest extends ApplicationAdapter {
@Override
public void create() {
super.create();
if(true) {
SquidStorage store = new SquidStorage("StorageTest");
store.compress = true;
System.out.println(store.preferences.get().values());
StatefulRNG srng = new StatefulRNG("Hello, Storage!"), r2;
FakeLanguageGen randomLanguage = FakeLanguageGen.randomLanguage(0x1337BEEFCAFEBABEL).mix(4, FakeLanguageGen.ARABIC_ROMANIZED, 5, FakeLanguageGen.JAPANESE_ROMANIZED, 3), lang2;
SpillWorldMap world = new SpillWorldMap(120, 80, "FutureLandXtreme"), w2;
world.generate(15, true);
GreasedRegion grease = new GreasedRegion(new ThunderRNG(75L), 75, 75), g2;
store.put("rng", srng);
store.put("language", randomLanguage);
store.put("world", world);
store.put("grease", grease);
System.out.println(store.show());
store.store("Test");
System.out.println("Stored preference bytes: " + store.preferencesSize());
r2 = store.get("Test", "rng", StatefulRNG.class);
lang2 = store.get("Test", "language", FakeLanguageGen.class);
w2 = store.get("Test", "world", SpillWorldMap.class);
g2 = store.get("Test", "grease", GreasedRegion.class);
long seed1 = srng.getState(), seed2 = r2.getState();
System.out.println("StatefulRNG states equal: " + (seed1 == seed2));
System.out.println("FakeLanguageGen values equal: " + randomLanguage.equals(lang2));
System.out.println("FakeLanguageGen outputs equal: " + randomLanguage.sentence(srng, 5, 10).equals(lang2.sentence(r2, 5, 10)));
System.out.println("SpillWorldMap.politicalMap values equal: " + Arrays.deepEquals(world.politicalMap, w2.politicalMap));
System.out.println("SpillWorldMap.atlas values equal: " + world.atlas.equals(w2.atlas));
System.out.println("GreasedRegion values equal: " + grease.equals(g2));
store.preferences.clear();
store.preferences.flush();
Gdx.app.exit();
}
else {
SquidStorage noCompression = new SquidStorage("StorageTest"), yesCompression = new SquidStorage("StorageCompressed");
noCompression.compress = false;
yesCompression.compress = true;
System.out.println(noCompression.preferences.get().values());
System.out.println(yesCompression.preferences.get().values());
StatefulRNG srng = new StatefulRNG("Hello, Storage!");
FakeLanguageGen randomLanguage = FakeLanguageGen.randomLanguage(0x1337BEEFCAFEBABEL).mix(4, FakeLanguageGen.ARABIC_ROMANIZED, 5, FakeLanguageGen.JAPANESE_ROMANIZED, 3);
EnumMap<Direction, String> em = new EnumMap<>(Direction.class), empty = new EnumMap<>(Direction.class);
em.put(Direction.DOWN_LEFT, "California");
em.put(Direction.DOWN_RIGHT, "Florida");
em.put(Direction.UP_RIGHT, "Maine");
em.put(Direction.UP_LEFT, "Washington");
em.put(Direction.DOWN, "Texas");
SpillWorldMap world = new SpillWorldMap(120, 80, "FutureLandXtreme");
world.generate(15, true);
GreasedRegion grease = new GreasedRegion(new ThunderRNG(75L), 75, 75);
String text = randomLanguage.sentence(srng.copy(), 5, 8);
ProbabilityTable<String> table = new ProbabilityTable<>("I heard you like JSON...");
table.add("well", 1).add("this", 2).add("ain't", 3).add("real", 4).add("JSON!", 5);
//String text = table.random();
noCompression.put("rng", srng);
noCompression.put("language", randomLanguage);
noCompression.put("generated", text);
noCompression.put("world", world);
noCompression.put("grease", grease);
noCompression.put("table", table);
noCompression.put("drawn", text);
noCompression.put("enum_map", em);
noCompression.put("empty_enum_map", empty);
yesCompression.put("rng", srng);
yesCompression.put("language", randomLanguage);
yesCompression.put("generated", text);
yesCompression.put("world", world);
yesCompression.put("grease", grease);
yesCompression.put("table", table);
yesCompression.put("drawn", text);
yesCompression.put("enum_map", em);
yesCompression.put("empty_enum_map", empty);
System.out.println(text);
String shown = noCompression.show();
System.out.println(shown);
System.out.println("Uncompressed preference bytes: " + shown.length() * 2);
shown = yesCompression.show();
System.out.println();
System.out.println(shown);
System.out.println("Compressed preference bytes: " + shown.length() * 2);
noCompression.preferences.clear();
noCompression.preferences.flush();
yesCompression.store("Compressed");
System.out.println(yesCompression.get("Compressed", "language", FakeLanguageGen.class).sentence(srng.copy(), 5, 8));
System.out.println(yesCompression.get("Compressed", "drawn", String.class));
System.out.println(em);
System.out.println(yesCompression.get("Compressed", "enum_map", EnumMap.class));
//note, these are different because EnumMap needs the enum's Class to be constructed, and an empty EnumMap
//can't have any keys' Class queried (no keys are present). EnumMap has a field that stores the Class as a
//final field, but it's private so we can't safely use it.
System.out.println(empty);
System.out.println(yesCompression.get("Compressed", "empty_enum_map", EnumMap.class));
yesCompression.preferences.clear();
yesCompression.preferences.flush();
Gdx.app.exit();
}
}
public static void main(String[] args)
{
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.title = "SquidLib Test: SquidStorage";
config.width = 512;
config.height = 128;
new LwjglApplication(new SquidStorageTest(), config);
}
}