From 9793e70937734aafe03b3a4430d9e002013d9b43 Mon Sep 17 00:00:00 2001 From: Willem Cazander Date: Mon, 31 Jan 2022 17:21:32 +0100 Subject: [PATCH] Added glocal china unit test and added T07PartPlanIt --- .../distributedrebirth/demo4d/ImGuiSetup.java | 18 +++-- .../demo4d/screen/BasePartRenderer.java | 76 +++++++++++++++---- .../numberxd/base2t/BasePartFactory.java | 47 ++++++++++++ .../numberxd/base2t/T07PartPlanIt.java | 67 ++++++++++++++++ .../numberxd/base2t/BasePartFactoryTest.java | 69 +++++++++++++++++ .../numberxd/base2t/T07PartPlanItTest.java | 41 ++++++++++ 6 files changed, 297 insertions(+), 21 deletions(-) create mode 100644 numberxd/src/main/love/distributedrebirth/numberxd/base2t/BasePartFactory.java create mode 100644 numberxd/src/main/love/distributedrebirth/numberxd/base2t/T07PartPlanIt.java create mode 100644 numberxd/src/test/love/distributedrebirth/numberxd/base2t/BasePartFactoryTest.java create mode 100644 numberxd/src/test/love/distributedrebirth/numberxd/base2t/T07PartPlanItTest.java diff --git a/core/src/love/distributedrebirth/demo4d/ImGuiSetup.java b/core/src/love/distributedrebirth/demo4d/ImGuiSetup.java index fce64e4d..00a8587b 100644 --- a/core/src/love/distributedrebirth/demo4d/ImGuiSetup.java +++ b/core/src/love/distributedrebirth/demo4d/ImGuiSetup.java @@ -8,7 +8,9 @@ import imgui.ImGui; import imgui.ImGuiIO; import imgui.gl3.ImGuiImplGl3; import imgui.glfw.ImGuiImplGlfw; -import love.distributedrebirth.numberxd.base2t.T60Sexagesimal; +import love.distributedrebirth.numberxd.base2t.BasePartFactory; +import love.distributedrebirth.numberxd.base2t.facet.BasePart; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt1; /** * Create and shutdown of ImGui and font activations. @@ -22,7 +24,6 @@ public class ImGuiSetup { private static final short[] glyphRangesArabic = new short[]{0x0600, 0x06FF}; private static final short[] glyphRangesSubSuper0 = new short[]{0x00B2, 0x00B9}; private static final short[] glyphRangesSubSuper1 = new short[]{0x2070, 0x209F}; - private static final short[] glyphRangesToneLetters0 = new short[]{0x02E5, 0x02E9}; public static void init() { long windowHandle = -1; @@ -53,13 +54,18 @@ public class ImGuiSetup { rangesBuilder.addRanges(glyphRangesArabic); rangesBuilder.addRanges(glyphRangesSubSuper0); rangesBuilder.addRanges(glyphRangesSubSuper1); - rangesBuilder.addRanges(glyphRangesToneLetters0); rangesBuilder.addText("@Ω\u4ed9⁴ ˧꜏⋇꜊꜔ ⁴ﷲΩ@"); rangesBuilder.addText("©Δ∞ \u4ed9\u4e0a\u4e3b\u5929"); - for (T60Sexagesimal value:T60Sexagesimal.values()) { - rangesBuilder.addText(value.getIdentifierLetter()); - rangesBuilder.addText(value.getChinaKey()); + for (int base:BasePartFactory.getSupportedBases()) { + for (BasePart part:BasePartFactory.buildBasePartsByBase(base)) { + rangesBuilder.addText(part.getIdentifierTone()); + rangesBuilder.addText(part.getIdentifierLetter()); + rangesBuilder.addText(part.getChinaKey()); + if (part instanceof BasePartAlt1) { + rangesBuilder.addText(BasePartAlt1.class.cast(part).getAlt1Value()); + } + } } final ImFontConfig fontConfig = new ImFontConfig(); diff --git a/core/src/love/distributedrebirth/demo4d/screen/BasePartRenderer.java b/core/src/love/distributedrebirth/demo4d/screen/BasePartRenderer.java index 3054cb4a..5ed5188e 100644 --- a/core/src/love/distributedrebirth/demo4d/screen/BasePartRenderer.java +++ b/core/src/love/distributedrebirth/demo4d/screen/BasePartRenderer.java @@ -1,16 +1,21 @@ package love.distributedrebirth.demo4d.screen; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import imgui.ImGui; import imgui.flag.ImGuiCond; import imgui.flag.ImGuiTableFlags; import imgui.type.ImBoolean; +import imgui.type.ImInt; import love.distributedrebirth.demo4d.Demo4DMain; import love.distributedrebirth.demo4d.ImGuiRendererMain; -import love.distributedrebirth.numberxd.base2t.T60Sexagesimal; +import love.distributedrebirth.numberxd.base2t.BasePartFactory; import love.distributedrebirth.numberxd.base2t.facet.BasePart; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt1; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt2; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt3; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt4; /** * @@ -19,6 +24,8 @@ import love.distributedrebirth.numberxd.base2t.facet.BasePart; */ public class BasePartRenderer extends ImGuiRendererMain { + private ImInt selectedBasePart = new ImInt(); + public BasePartRenderer(Demo4DMain main) { super(main); } @@ -29,21 +36,34 @@ public class BasePartRenderer extends ImGuiRendererMain { ImGui.setNextWindowSize(640, 480, ImGuiCond.FirstUseEver); ImGui.begin("Base part", widgetOpen); - ImGui.text("Current part type:"); + ImGui.text("Current Part"); ImGui.sameLine(); - ImGui.text("T60Sexagesimal"); - int flags = ImGuiTableFlags.ScrollX | ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; - ImGui.beginTable("base-part", 5, flags); - ImGui.tableSetupColumn("ordinal"); - ImGui.tableSetupColumn("idTone"); - ImGui.tableSetupColumn("idLetter"); - ImGui.tableSetupColumn("ChinaKey"); - ImGui.tableSetupColumn("ChinaValue"); - ImGui.tableHeadersRow(); - - List parts = Arrays.asList(T60Sexagesimal.values()); - for (BasePart part:parts) { + List bases = new ArrayList<>(); + for (int base:BasePartFactory.getSupportedBases()) { + bases.add(Integer.toString(base)); + } + String[] items = new String[bases.size()]; + + ImGui.combo("Type", selectedBasePart, bases.toArray(items)); + String selectedItem = items[selectedBasePart.get()]; + Integer baseNumber = Integer.valueOf(selectedItem); + BasePart[] baseParts = BasePartFactory.buildBasePartsByBase(baseNumber); + + int flags = ImGuiTableFlags.ScrollX | ImGuiTableFlags.RowBg | ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; + ImGui.beginTable("base-part", 9, flags); + ImGui.tableSetupColumn("Ordinal"); + ImGui.tableSetupColumn("Tone"); + ImGui.tableSetupColumn("Letter"); + ImGui.tableSetupColumn("ChinaK"); + ImGui.tableSetupColumn("ChinaV"); + ImGui.tableSetupColumn("Alt1"); + ImGui.tableSetupColumn("Alt2"); + ImGui.tableSetupColumn("Alt3"); + ImGui.tableSetupColumn("Alt4"); + ImGui.tableHeadersRow(); + + for (BasePart part:baseParts) { ImGui.tableNextRow(); ImGui.tableNextColumn(); ImGui.text(Integer.toString(part.ordinal())); @@ -55,7 +75,33 @@ public class BasePartRenderer extends ImGuiRendererMain { ImGui.text(part.getChinaKey()); ImGui.tableNextColumn(); ImGui.text(part.getChinaValue()); + + ImGui.tableNextColumn(); + if (part instanceof BasePartAlt1) { + ImGui.text(BasePartAlt1.class.cast(part).getAlt1Value()); + } else { + ImGui.text(""); + } + ImGui.tableNextColumn(); + if (part instanceof BasePartAlt2) { + ImGui.text(BasePartAlt2.class.cast(part).getAlt1Value()); + } else { + ImGui.text(""); + } + ImGui.tableNextColumn(); + if (part instanceof BasePartAlt3) { + ImGui.text(BasePartAlt3.class.cast(part).getAlt1Value()); + } else { + ImGui.text(""); + } + ImGui.tableNextColumn(); + if (part instanceof BasePartAlt4) { + ImGui.text(BasePartAlt4.class.cast(part).getAlt1Value()); + } else { + ImGui.text(""); + } } + ImGui.endTable(); ImGui.end(); diff --git a/numberxd/src/main/love/distributedrebirth/numberxd/base2t/BasePartFactory.java b/numberxd/src/main/love/distributedrebirth/numberxd/base2t/BasePartFactory.java new file mode 100644 index 00000000..eb4a952b --- /dev/null +++ b/numberxd/src/main/love/distributedrebirth/numberxd/base2t/BasePartFactory.java @@ -0,0 +1,47 @@ +package love.distributedrebirth.numberxd.base2t; + +import love.distributedrebirth.numberxd.base2t.facet.BasePart; + +public final class BasePartFactory { + + private static final int[] SUPPORTED_BASES = {2,3,4,5,6,7,8,12,16,20,60}; + + public static int[] getSupportedBases() { + return SUPPORTED_BASES; + } + + public static BasePart[] buildBasePartsByBase(int base) { + switch (base) { + case 2: + return T02PartBinary.values(); + case 3: + return T03PartTrit.values(); + case 4: + return T04PartQuad.values(); + case 5: + return T05PartPental.values(); + case 6: + return T06PartSeximal.values(); + case 7: + return T07PartPlanIt.values(); + case 8: + return T08PartOctal.values(); + case 9: + throw new IllegalArgumentException("Unsupported base: "+base); + case 10: + throw new IllegalArgumentException("Unsupported base: "+base); + case 11: + throw new IllegalArgumentException("Unsupported base: "+base); + case 12: + return T12PartUncial.values(); + case 16: + return T16PartHex.values(); + case 20: + return T20PartScore.values(); + case 60: + return T60Sexagesimal.values(); + default: + throw new IllegalArgumentException("Unsupported base: "+base); + } + } +} diff --git a/numberxd/src/main/love/distributedrebirth/numberxd/base2t/T07PartPlanIt.java b/numberxd/src/main/love/distributedrebirth/numberxd/base2t/T07PartPlanIt.java new file mode 100644 index 00000000..6dc0b4c4 --- /dev/null +++ b/numberxd/src/main/love/distributedrebirth/numberxd/base2t/T07PartPlanIt.java @@ -0,0 +1,67 @@ +package love.distributedrebirth.numberxd.base2t; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import love.distributedrebirth.numberxd.base2t.facet.BasePart; +import love.distributedrebirth.numberxd.base2t.facet.BaseFacetKey; +import love.distributedrebirth.numberxd.base2t.facet.BasePartAlt1; + +/** + * The distribution by 7. + * + * @author willemtsade ©Δ∞ 仙上主天 + */ +public enum T07PartPlanIt implements BasePart,BasePartAlt1 { + + PART_1("˥","0","♎︎","libra","天秤座"), + PART_2("꜉","1","♏︎","scorpio","天蠍座"), + PART_3("꜋","2","♓︎","pisces","雙魚座"), + PART_4("꜔","3","♍︎","virgo","處女座"), + PART_5("꜎","4","♋︎","cancer","癌症"), + PART_6("꜐","5","♑︎","capricorn","摩羯座"), + PART_7("˩","7","♈︎","aries","白羊座"), + ; + + public static int LENGTH = 6; + private final Map facetStore = new HashMap<>(); + private static final String ALT_1_NAME = "Fallen sign"; + private static final String ALT_1_WIKI = "https://en.wikipedia.org/wiki/Classical_planet#Western_astrology"; + private static final Map TONE_MAP = Collections.unmodifiableMap( + Arrays.asList(values()).stream().collect(Collectors.toMap(v -> v.getIdentifierTone(), v -> v))); + private static final Map CHINA_MAP = Collections.unmodifiableMap( + Arrays.asList(values()).stream().collect(Collectors.toMap(v -> v.getChinaKey(), v -> v))); + + private T07PartPlanIt(String idTone, String idLetter, String chinaKey, String chinaValue, String alt1Value) { + this.getFacetStore().put(BaseFacetKey.ID_TONE, idTone); + this.getFacetStore().put(BaseFacetKey.ID_LETTER, idLetter); + this.getFacetStore().put(BaseFacetKey.CHINA_KEY, chinaKey); + this.getFacetStore().put(BaseFacetKey.CHINA_VALUE, chinaValue); + this.getFacetStore().put(BaseFacetKey.ALT_1_VALUE, alt1Value); + this.getFacetStore().put(BaseFacetKey.ALT_1_NAME, ALT_1_NAME); + this.getFacetStore().put(BaseFacetKey.ALT_1_WIKI, ALT_1_WIKI); + } + + @Override + public Map getFacetStore() { + return facetStore; + } + + public static void forEach(Consumer consumer) { + for (T07PartPlanIt value:values()) { + consumer.accept(value); + } + } + + public static T07PartPlanIt valueOfTone(String identifierTone) { + return TONE_MAP.get(identifierTone); + } + + public static T07PartPlanIt valueOfChina(String chinaKey) { + return CHINA_MAP.get(chinaKey); + } +} diff --git a/numberxd/src/test/love/distributedrebirth/numberxd/base2t/BasePartFactoryTest.java b/numberxd/src/test/love/distributedrebirth/numberxd/base2t/BasePartFactoryTest.java new file mode 100644 index 00000000..eac58617 --- /dev/null +++ b/numberxd/src/test/love/distributedrebirth/numberxd/base2t/BasePartFactoryTest.java @@ -0,0 +1,69 @@ +package love.distributedrebirth.numberxd.base2t; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import love.distributedrebirth.numberxd.base2t.facet.BasePart; + +public class BasePartFactoryTest { + + @Test + public void testSupportedBases() { + int[] bases = BasePartFactory.getSupportedBases(); + Assertions.assertNotNull(bases); + Assertions.assertTrue(bases.length > 1); + Assertions.assertTrue(bases.length < 100); + for (int base:bases) { + Assertions.assertNotNull(base); + } + } + + @Test + public void testGlobalChinaMap() { + Map global = new HashMap<>(); + for (int base:BasePartFactory.getSupportedBases()) { + for (BasePart part:BasePartFactory.buildBasePartsByBase(base)) { + Assertions.assertFalse(global.containsKey(part.getChinaKey())); + global.put(part.getChinaKey(), part.getChinaValue()); + } + } + Assertions.assertTrue(global.size() > 1); + } + + @Test + public void testGlobalToneMap() { + boolean duplicate = false; + Map global = new HashMap<>(); + for (int base:BasePartFactory.getSupportedBases()) { + for (BasePart part:BasePartFactory.buildBasePartsByBase(base)) { + if (global.containsKey(part.getIdentifierTone())) { + duplicate = true; + break; + } + global.put(part.getIdentifierTone(), part.getChinaValue()); + } + } + Assertions.assertTrue(global.size() > 1); + Assertions.assertTrue(duplicate); + } + + @Test + public void testGlobalLetterMap() { + boolean duplicate = false; + Map global = new HashMap<>(); + for (int base:BasePartFactory.getSupportedBases()) { + for (BasePart part:BasePartFactory.buildBasePartsByBase(base)) { + if (global.containsKey(part.getIdentifierLetter())) { + duplicate = true; + break; + } + global.put(part.getIdentifierLetter(), part.getChinaValue()); + } + } + Assertions.assertTrue(global.size() > 1); + Assertions.assertTrue(duplicate); + } +} diff --git a/numberxd/src/test/love/distributedrebirth/numberxd/base2t/T07PartPlanItTest.java b/numberxd/src/test/love/distributedrebirth/numberxd/base2t/T07PartPlanItTest.java new file mode 100644 index 00000000..66de6aaf --- /dev/null +++ b/numberxd/src/test/love/distributedrebirth/numberxd/base2t/T07PartPlanItTest.java @@ -0,0 +1,41 @@ +package love.distributedrebirth.numberxd.base2t; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * + * + * @author willemtsade ©Δ∞ 仙上主天 + */ +public class T07PartPlanItTest { + + @Test + public void testBasePart() { + for (T07PartPlanIt value:T07PartPlanIt.values()) { + Assertions.assertNotNull(value.getIdentifierTone()); + Assertions.assertNotNull(value.getIdentifierLetter()); + Assertions.assertNotNull(value.getChinaKey()); + Assertions.assertNotNull(value.getChinaValue()); + Assertions.assertNotNull(value.getAlt1Value()); + Assertions.assertNotNull(value.getAlt1Name()); + Assertions.assertNotNull(value.getAlt1Wiki()); + } + } + + @Test + public void testToneMap() { + Assertions.assertEquals(T07PartPlanIt.PART_1, T07PartPlanIt.valueOfTone("˥")); + Assertions.assertEquals(T07PartPlanIt.PART_2, T07PartPlanIt.valueOfTone("꜉")); + Assertions.assertEquals(T07PartPlanIt.PART_6, T07PartPlanIt.valueOfTone("꜐")); + Assertions.assertEquals(T07PartPlanIt.PART_7, T07PartPlanIt.valueOfTone("˩")); + } + + @Test + public void testChinaMap() { + Assertions.assertEquals(T07PartPlanIt.PART_1, T07PartPlanIt.valueOfChina("♎︎")); + Assertions.assertEquals(T07PartPlanIt.PART_2, T07PartPlanIt.valueOfChina("♏︎")); + Assertions.assertEquals(T07PartPlanIt.PART_6, T07PartPlanIt.valueOfChina("♑︎")); + Assertions.assertEquals(T07PartPlanIt.PART_7, T07PartPlanIt.valueOfChina("♈︎")); + } +}