You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2022/09/28 12:45:33 UTC

[plc4x] branch develop updated: refactor(plc-values): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 4ee794ecf refactor(plc-values): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.
4ee794ecf is described below

commit 4ee794ecf2f8afafaf9f8aba8d51238b9aee3184
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Wed Sep 28 14:45:24 2022 +0200

    refactor(plc-values): Refactored all usages of BitString to use BYTE, WORD, DWORD or LWORD instead.
---
 RELEASE_NOTES                                      |   5 +
 .../plc4x/protocol/ads/ManualAdsDriverTest.java    |  19 ++-
 .../apache/plc4x/java/modbus/ModbusEncodeTest.java |   8 +-
 .../java/s7/readwrite/ManualS7DriverTest.java      |   6 +-
 .../org/apache/plc4x/nifi/util/Plc4xCommon.java    |   5 +-
 .../java/spi/values/IEC61131ValueHandler.java      |  50 +++----
 .../apache/plc4x/java/spi/values/PlcBitString.java | 148 ---------------------
 .../org/apache/plc4x/test/manual/ManualTest.java   |  10 +-
 8 files changed, 43 insertions(+), 208 deletions(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 378c05c5f..2d854a780 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -33,6 +33,11 @@ Incompatible changes
   examples related, as Edgent is abandoned and there were
   CVEs reported, which will not be fixed.
 
+- We have replaced the BitString types with BYTE, WORD, DWORD,
+  and LWORD which generally match their unsigned integer
+  counterparts. So we are no longer returning lists of boolean
+  values for any of these types.
+
 Bug Fixes
 ---------
 
diff --git a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
index 35691b976..792afed65 100644
--- a/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
+++ b/plc4j/drivers/ads/src/test/java/org/apache/plc4x/protocol/ads/ManualAdsDriverTest.java
@@ -84,13 +84,10 @@ public class ManualAdsDriverTest extends ManualTest {
         String connectionString = String.format("ads:tcp://%s?sourceAmsNetId=%s&sourceAmsPort=%d&targetAmsNetId=%s&targetAmsPort=%d", spsIp, sourceAmsNetId, sourceAmsPort, targetAmsNetId, targetAmsPort);
         ManualAdsDriverTest test = new ManualAdsDriverTest(connectionString);
         test.addTestCase("MAIN.hurz_BOOL", new PlcBOOL(true));
-        test.addTestCase("MAIN.hurz_BYTE", new PlcBitString(new boolean[]{false, false, true, false, true, false, true, false}));
-        test.addTestCase("MAIN.hurz_WORD", new PlcBitString(new boolean[]{true, false, true, false, false, true, false, true, true, false, true, true, true, false, false, false}));
-        test.addTestCase("MAIN.hurz_DWORD", new PlcBitString(new boolean[]{true, true, true, true, true, true, false, false, true, true, false, true, true, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, true, false, false, false}));
-        // These are the values, if we decide to go with numeric values instead of bit-strings.
-        //test.addTestCase("MAIN.hurz_BYTE", new PlcBYTE(42));
-        //test.addTestCase("MAIN.hurz_WORD", new PlcWORD(42424));
-        //test.addTestCase("MAIN.hurz_DWORD", new PlcDWORD(4242442424L));
+        test.addTestCase("MAIN.hurz_BYTE", new PlcBYTE(42));
+        test.addTestCase("MAIN.hurz_WORD", new PlcWORD(42424));
+        test.addTestCase("MAIN.hurz_DWORD", new PlcDWORD(4242442424L));
+        test.addTestCase("MAIN.hurz_LWORD", new PlcLWORD(4242442424242424242L));
         test.addTestCase("MAIN.hurz_SINT", new PlcSINT(-42));
         test.addTestCase("MAIN.hurz_USINT", new PlcUSINT(42));
         test.addTestCase("MAIN.hurz_INT", new PlcINT(-2424));
@@ -111,10 +108,10 @@ public class ManualAdsDriverTest extends ManualTest {
         //test.addTestCase("MAIN.hurz_DT", new PlcDT("1972-03-29T00:00"));
         Map<String, PlcValue> children = new HashMap<>();
         children.put("hurz_BOOL", new PlcBOOL(true));
-        children.put("hurz_BYTE", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, true}));
-        children.put("hurz_WORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false}));
-        children.put("hurz_DWORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true}));
-        children.put("hurz_LDWORD", new PlcBitString(new boolean[]{false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, [...]
+        children.put("hurz_BYTE", new PlcBYTE(42));
+        children.put("hurz_WORD", new PlcWORD(42424));
+        children.put("hurz_DWORD", new PlcDWORD(4242442424L));
+        children.put("hurz_LDWORD", new PlcLWORD(4242442424242424242L));
         children.put("hurz_SINT", new PlcSINT(5));
         children.put("hurz_USINT", new PlcUSINT(6));
         children.put("hurz_INT", new PlcINT(7));
diff --git a/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java b/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
index fe1ab6321..7c509b7b6 100644
--- a/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
+++ b/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
@@ -58,7 +58,7 @@ public class ModbusEncodeTest {
         Integer[] object = {1,255,0,4,5,6,7,8};
         ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:8:BYTE");
         PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
-        Assertions.assertEquals("[[false,false,false,false,false,false,false,true],[true,true,true,true,true,true,true,true],[false,false,false,false,false,false,false,false],[false,false,false,false,false,true,false,false],[false,false,false,false,false,true,false,true],[false,false,false,false,false,true,true,false],[false,false,false,false,false,true,true,true],[false,false,false,false,true,false,false,false]]", list.toString());
+        Assertions.assertEquals("[1,255,0,4,5,6,7,8]", list.toString());
     }
 
     @Test
@@ -82,7 +82,7 @@ public class ModbusEncodeTest {
         Integer[] object = {1,65535,10,55000,5,6,7};
         ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:WORD");
         PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
-        Assertions.assertEquals("[[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[false,false,false,false,false,false,false,false,false,false,false,false,true,false,true,false],[true,true,false,true,false,true,true,false,true,true,false,true,true,false,false,false],[false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,true [...]
+        Assertions.assertEquals("[1,65535,10,55000,5,6,7]", list.toString());
     }
 
     @Test
@@ -106,7 +106,7 @@ public class ModbusEncodeTest {
         Long[] object = {1L,655354775L,0L,4294967295L,5L,6L,7L};
         ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:DWORD");
         PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
-        Assertions.assertEquals("[[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true],[false,false,true,false,false,true,true,true,false,false,false,false,true,true,true,true,true,true,true,false,true,false,true,true,true,false,false,true,false,true,true,true],[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false [...]
+        Assertions.assertEquals("[1,655354775,0,4294967295,5,6,7]", list.toString());
     }
 
     @Test
@@ -130,7 +130,7 @@ public class ModbusEncodeTest {
         BigInteger[] object = {BigInteger.valueOf(1L),BigInteger.valueOf(655354775L),BigInteger.valueOf(0),new BigInteger("18446744073709551615"),BigInteger.valueOf(5L),BigInteger.valueOf(6L),BigInteger.valueOf(7L)};
         ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:7:LWORD");
         PlcList list = (PlcList) IEC61131ValueHandler.of(holdingregister, object);
-        Assertions.assertEquals("[[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true],[false,false,false,false,false,false,false,false,false,false,false,false, [...]
+        Assertions.assertEquals("[1,655354775,0,18446744073709551615,5,6,7]", list.toString());
     }
 
     @Test
diff --git a/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
index 4f1488a5b..e1a041301 100644
--- a/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
+++ b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
@@ -73,9 +73,9 @@ public class ManualS7DriverTest extends ManualTest {
     public static void main(String[] args) throws Exception {
         ManualS7DriverTest test = new ManualS7DriverTest("s7://192.168.23.30");
         test.addTestCase("%DB4:0.0:BOOL", new PlcBOOL(true));
-        test.addTestCase("%DB4:1:BYTE", new PlcBitString(new boolean[]{false, false, true, false, true, false, true, false}));
-        test.addTestCase("%DB4:2:WORD", new PlcBitString(new boolean[]{true, false, true, false, false, true, false, true, true, false, true, true, true, false, false, false}));
-        test.addTestCase("%DB4:4:DWORD", new PlcBitString(new boolean[]{true, true, true, true, true, true, false, false, true, true, false, true, true, true, true, false, true, false, false, false, true, false, false, false, true, false, true, true, true, false, false, false}));
+        test.addTestCase("%DB4:1:BYTE", new PlcBYTE(42));
+        test.addTestCase("%DB4:2:WORD", new PlcWORD(42424));
+        test.addTestCase("%DB4:4:DWORD", new PlcDWORD(4242442424L));
         test.addTestCase("%DB4:16:SINT", new PlcSINT(-42));
         test.addTestCase("%DB4:17:USINT", new PlcUSINT(42));
         test.addTestCase("%DB4:18:INT", new PlcINT(-2424));
diff --git a/plc4j/integrations/apache-nifi/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
index bfc4cea56..4509e35b3 100644
--- a/plc4j/integrations/apache-nifi/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
@@ -28,7 +28,6 @@ import org.apache.avro.SchemaBuilder.FieldAssembler;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.values.PlcBOOL;
 import org.apache.plc4x.java.spi.values.PlcBYTE;
-import org.apache.plc4x.java.spi.values.PlcBitString;
 import org.apache.plc4x.java.spi.values.PlcCHAR;
 import org.apache.plc4x.java.spi.values.PlcDATE;
 import org.apache.plc4x.java.spi.values.PlcDATE_AND_TIME;
@@ -76,9 +75,7 @@ public class Plc4xCommon {
 		
 		for (Map.Entry<String, ? extends PlcValue> entry : responseDataStructure.entrySet()) {
 			fieldName = entry.getKey();
-			if (entry.getValue() instanceof PlcBitString) {
-				builder.name(fieldName).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault();
-			}else if (entry.getValue() instanceof PlcBOOL) {
+			if (entry.getValue() instanceof PlcBOOL) {
 				builder.name(fieldName).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault();
 			}else if (entry.getValue() instanceof PlcBYTE) {
 				builder.name(fieldName).type().unionOf().nullBuilder().endNull().and().bytesType().endUnion().noDefault();
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
index e31a803de..9318da108 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/IEC61131ValueHandler.java
@@ -129,17 +129,15 @@ public class IEC61131ValueHandler implements PlcValueHandler {
                 case "BYTE":
                 case "BITARR8":
                     if(value instanceof Short) {
-                        return new PlcBitString((short) value);
+                        return new PlcBYTE((short) value);
                     } else if(value instanceof Integer) {
-                        return new PlcBitString(((Integer) value).shortValue());
+                        return new PlcBYTE(((Integer) value).shortValue());
                     } else if(value instanceof Long) {
-                        return new PlcBitString(((Long) value).shortValue());
+                        return new PlcBYTE(((Long) value).shortValue());
                     } else if(value instanceof BigInteger) {
-                        return new PlcBitString(((BigInteger) value).shortValue());
-                    } else if(value instanceof boolean[]) {
-                        return new PlcBitString((boolean[]) value);
+                        return new PlcBYTE(((BigInteger) value).shortValue());
                     }
-                    throw new PlcRuntimeException("BYTE requires short or boolean[8]");
+                    throw new PlcRuntimeException("BYTE requires short");
                 case "SINT":
                 case "INT8":
                     return PlcSINT.of(value);
@@ -156,17 +154,15 @@ public class IEC61131ValueHandler implements PlcValueHandler {
                 case "WORD":
                 case "BITARR16":
                     if(value instanceof Short) {
-                        return new PlcBitString((int) value);
+                        return new PlcWORD((int) value);
                     } else if(value instanceof Integer) {
-                        return new PlcBitString((int) value);
+                        return new PlcWORD((int) value);
                     } else if(value instanceof Long) {
-                        return new PlcBitString(((Long) value).intValue());
+                        return new PlcWORD(((Long) value).intValue());
                     } else if(value instanceof BigInteger) {
-                        return new PlcBitString(((BigInteger) value).intValue());
-                    } else if(value instanceof boolean[]) {
-                        return new PlcBitString((boolean[]) value);
+                        return new PlcWORD(((BigInteger) value).intValue());
                     }
-                    throw new PlcRuntimeException("WORD requires int or boolean[16]");
+                    throw new PlcRuntimeException("WORD requires int");
                 case "DINT":
                 case "INT32":
                     return PlcDINT.of(value);
@@ -176,17 +172,15 @@ public class IEC61131ValueHandler implements PlcValueHandler {
                 case "DWORD":
                 case "BITARR32":
                     if(value instanceof Short) {
-                        return new PlcBitString((long) value);
+                        return new PlcDWORD((long) value);
                     } else if(value instanceof Integer) {
-                        return new PlcBitString((long) value);
+                        return new PlcDWORD((long) value);
                     } else if(value instanceof Long) {
-                        return new PlcBitString((long) value);
+                        return new PlcDWORD((long) value);
                     } else if(value instanceof BigInteger) {
-                        return new PlcBitString(((BigInteger) value).longValue());
-                    } else if(value instanceof boolean[]) {
-                        return new PlcBitString((boolean[]) value);
+                        return new PlcDWORD(((BigInteger) value).longValue());
                     }
-                    throw new PlcRuntimeException("DWORD requires long or boolean[32]");
+                    throw new PlcRuntimeException("DWORD requires long");
                 case "LINT":
                 case "INT64":
                     return PlcLINT.of(value);
@@ -196,17 +190,15 @@ public class IEC61131ValueHandler implements PlcValueHandler {
                 case "LWORD":
                 case "BITARR64":
                     if(value instanceof Short) {
-                        return new PlcBitString(BigInteger.valueOf((long) value));
+                        return new PlcLWORD(BigInteger.valueOf((long) value));
                     } else if(value instanceof Integer) {
-                        return new PlcBitString(BigInteger.valueOf((long) value));
+                        return new PlcLWORD(BigInteger.valueOf((long) value));
                     } else if(value instanceof Long) {
-                        return new PlcBitString(BigInteger.valueOf((long) value));
+                        return new PlcLWORD(BigInteger.valueOf((long) value));
                     } else if(value instanceof BigInteger) {
-                        return new PlcBitString((BigInteger) value);
-                    } else if(value instanceof boolean[]) {
-                        return new PlcBitString((boolean[]) value);
+                        return new PlcLWORD((BigInteger) value);
                     }
-                    throw new PlcRuntimeException("LWORD requires BigInteger or boolean[64]");
+                    throw new PlcRuntimeException("LWORD requires BigInteger");
                 case "REAL":
                 case "FLOAT":
                     return PlcREAL.of(value);
@@ -221,7 +213,7 @@ public class IEC61131ValueHandler implements PlcValueHandler {
                     return PlcSTRING.of(value);
                 case "WSTRING":
                 case "STRING16":
-                    return PlcSTRING.of(value);
+                    return PlcWSTRING.of(value);
                 case "TIME":
                     return PlcTIME.of(value);
                 case "DATE":
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBitString.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBitString.java
deleted file mode 100644
index f203b88c8..000000000
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBitString.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.plc4x.java.spi.values;
-
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
-import org.apache.plc4x.java.api.value.PlcValue;
-
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcBitString extends PlcList {
-
-    public PlcBitString(boolean[] values) {
-        super(toBitString(values));
-    }
-
-    public PlcBitString(short byteBitString) {
-        super(toBitString(BigInteger.valueOf(byteBitString), 8));
-    }
-
-    public PlcBitString(int wordBitString) {
-        super(toBitString(BigInteger.valueOf(wordBitString), 16));
-    }
-
-    public PlcBitString(long dwordBitString) {
-        super(toBitString(BigInteger.valueOf(dwordBitString), 32));
-    }
-
-    public PlcBitString(BigInteger lwordBitString) {
-        super(toBitString(lwordBitString, 64));
-    }
-
-    @Override
-    public boolean isShort() {
-        return getList().size() == 8;
-    }
-
-    @Override
-    public short getShort() {
-        if(!isShort()) {
-            throw new PlcRuntimeException("getShort requires 8 boolean values");
-        }
-        return fromBitString(getList(), 8).shortValue();
-    }
-
-    @Override
-    public boolean isInteger() {
-        return getList().size() == 16;
-    }
-
-    @Override
-    public int getInteger() {
-        if(!isInteger()) {
-            throw new PlcRuntimeException("getInteger requires 16 boolean values");
-        }
-        return fromBitString(getList(), 16).intValue();
-    }
-
-    @Override
-    public boolean isLong() {
-        return getList().size() == 32;
-    }
-
-    @Override
-    public long getLong() {
-        if(!isLong()) {
-            throw new PlcRuntimeException("getLong requires 32 boolean values");
-        }
-        return fromBitString(getList(), 32).longValue();
-    }
-
-    @Override
-    public boolean isBigInteger() {
-        return getList().size() == 64;
-    }
-
-    @Override
-    public BigInteger getBigInteger() {
-        if(!isBigInteger()) {
-            throw new PlcRuntimeException("getBigInteger requires 64 boolean values");
-        }
-        return fromBitString(getList(), 64);
-    }
-
-    @Override
-    public Object getObject() {
-        boolean[] result = new boolean[getLength()];
-        for (int i = 0; i < getLength(); i++) {
-            result[i] = getList().get(i).getBoolean();
-        }
-        return result;
-    }
-
-    public static List<PlcValue> toBitString(boolean[] booleanValues) {
-        if((booleanValues.length != 8) && (booleanValues.length != 16) &&
-            (booleanValues.length != 32) && (booleanValues.length != 64)) {
-            throw new PlcRuntimeException("invalid number of values");
-        }
-        List<PlcValue> values = new ArrayList<>(booleanValues.length);
-        for (boolean booleanValue : booleanValues) {
-            values.add(new PlcBOOL(booleanValue));
-        }
-        return values;
-    }
-
-    public static List<PlcValue> toBitString(BigInteger bigInteger, int numBits) {
-        if(bigInteger.bitCount() > numBits) {
-            throw new PlcRuntimeException("value too big");
-        }
-        // Convert the numeric value into an array of bits.
-        List<PlcValue> values = new ArrayList<>(numBits);
-        for (int i = numBits - 1; i >= 0; i--) {
-            values.add(new PlcBOOL(bigInteger.testBit(i)));
-        }
-        return values;
-    }
-
-    public static BigInteger fromBitString(List<PlcValue> bitString, int numBits) {
-        BigInteger bigInteger = new BigInteger(String.valueOf(0L));
-        for (int i = 0; i < numBits; i++) {
-            final PlcValue plcValue = bitString.get(i);
-            if(plcValue.getBoolean()) {
-                bigInteger = bigInteger.setBit((numBits - 1) - i);
-            }
-        }
-        return bigInteger;
-    }
-
-}
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
index 018329b36..494da6bcf 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
@@ -26,7 +26,6 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.api.value.PlcValue;
-import org.apache.plc4x.java.spi.values.PlcBitString;
 import org.apache.plc4x.java.spi.values.PlcList;
 import org.apache.plc4x.java.spi.values.PlcValues;
 import org.junit.jupiter.api.Assertions;
@@ -154,14 +153,7 @@ public abstract class ManualTest {
                     Assertions.assertEquals(PlcResponseCode.OK, readResponse.getResponseCode(fieldName),
                         "Field: " + fieldName);
                     Assertions.assertNotNull(readResponse.getPlcValue(fieldName), "Field: " + fieldName);
-                    if (readResponse.getPlcValue(fieldName) instanceof PlcBitString) {
-                        PlcBitString plcBitString = (PlcBitString) readResponse.getPlcValue(fieldName);
-                        List<PlcValue> expectedValues = ((PlcBitString) testCase.expectedReadValue).getList();
-                        for (int j = 0; j < expectedValues.size(); j++) {
-                            Assertions.assertEquals(expectedValues.get(j).toString(), plcBitString.getIndex(j).toString(),
-                                "Field: " + fieldName);
-                        }
-                    } else if (readResponse.getPlcValue(fieldName) instanceof PlcList) {
+                    if (readResponse.getPlcValue(fieldName) instanceof PlcList) {
                         PlcList plcList = (PlcList) readResponse.getPlcValue(fieldName);
                         List<Object> expectedValues = (List<Object>) testCase.expectedReadValue;
                         for (int j = 0; j < expectedValues.size(); j++) {