public void Test_against_CSV_Dataset(int numDataBits, Mode mode, ErrorCorrectionLevel level, string encodingName, int expectVersionNum) { VersionControlStruct vcStruct = VersionControl.InitialSetup(numDataBits, mode, level, encodingName); if (vcStruct.VersionDetail.Version != expectVersionNum) { Assert.Fail("Method return version number: {0} Expect value: {1}", vcStruct.VersionDetail.Version, expectVersionNum); } }
/// <summary> /// Combine Gma.QrCodeNet.Encoding input recognition method and version control method /// with legacy code. To create expected answer. /// This is base on assume Gma.QrCodeNet.Encoding input recognition and version control sometime /// give different result as legacy code. /// </summary> /// <param name="content"></param> /// <returns></returns> internal static BitVector DataEncodeUsingReferenceImplementation(string content, ErrorCorrectionLevel ecLevel, out QRCodeInternal qrInternal) { if (string.IsNullOrEmpty(content)) { throw new ArgumentException("input string content can not be null or empty"); } //Choose mode RecognitionStruct recognitionResult = InputRecognise.Recognise(content); string encodingName = recognitionResult.EncodingName; Mode mode = ConvertMode(recognitionResult.Mode); //append byte to databits BitVector dataBits = new BitVector(); EncoderInternal.appendBytes(content, mode, dataBits, encodingName); int dataBitsLength = dataBits.size(); VersionControlStruct vcStruct = VersionControl.InitialSetup(dataBitsLength, recognitionResult.Mode, ecLevel, recognitionResult.EncodingName); //ECI BitVector headerAndDataBits = new BitVector(); string defaultByteMode = "iso-8859-1"; if (mode == Mode.BYTE && !defaultByteMode.Equals(encodingName)) { CharacterSetECI eci = CharacterSetECI.getCharacterSetECIByName(encodingName); if (eci != null) { EncoderInternal.appendECI(eci, headerAndDataBits); } } //Mode EncoderInternal.appendModeInfo(mode, headerAndDataBits); //Char info int numLetters = mode.Equals(Mode.BYTE)?dataBits.sizeInBytes():content.Length; EncoderInternal.appendLengthInfo(numLetters, vcStruct.VersionDetail.Version, mode, headerAndDataBits); //Combine with dataBits headerAndDataBits.appendBitVector(dataBits); // Terminate the bits properly. EncoderInternal.terminateBits(vcStruct.VersionDetail.NumDataBytes, headerAndDataBits); qrInternal = new QRCodeInternal(); qrInternal.Version = vcStruct.VersionDetail.Version; qrInternal.MatrixWidth = vcStruct.VersionDetail.MatrixWidth; qrInternal.EcLevelInternal = ErrorCorrectionLevelConverter.ToInternal(ecLevel); qrInternal.NumTotalBytes = vcStruct.VersionDetail.NumTotalBytes; qrInternal.NumDataBytes = vcStruct.VersionDetail.NumDataBytes; qrInternal.NumRSBlocks = vcStruct.VersionDetail.NumECBlocks; return(headerAndDataBits); }
internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel) { RecognitionStruct recognitionResult = InputRecognise.Recognise(content); EncoderBase encoderBase = CreateEncoder(recognitionResult.EncodingName); BitList encodeContent = encoderBase.GetDataBits(content); int encodeContentLength = encodeContent.Count; VersionControlStruct vcStruct = VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName); BitList dataCodewords = new BitList(); // Eci header if (vcStruct.IsContainECI && !(vcStruct.ECIHeader is null)) { dataCodewords.Add(vcStruct.ECIHeader); } // Header dataCodewords.Add(encoderBase.GetModeIndicator()); int numLetter = encodeContentLength >> 3; dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version)); // Data dataCodewords.Add(encodeContent); // Terminator Padding dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes); int dataCodewordsCount = dataCodewords.Count; if ((dataCodewordsCount & 0x7) != 0) { throw new ArgumentException($"{nameof(dataCodewords)} is not byte sized."); } else if (dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes) { throw new ArgumentException($"{nameof(dataCodewords)} num of bytes not equal to {nameof(vcStruct.VersionDetail.NumDataBytes)} for current version"); } var encStruct = new EncodationStruct(vcStruct) { DataCodewords = dataCodewords }; return(encStruct); }
internal static EncodationStruct Encode(string content, ErrorCorrectionLevel ecLevel) { RecognitionStruct recognitionResult = InputRecognise.Recognise(content); EncoderBase encoderBase = CreateEncoder(recognitionResult.EncodingName); BitList encodeContent = encoderBase.GetDataBits(content); int encodeContentLength = encodeContent.Count; VersionControlStruct vcStruct = VersionControl.InitialSetup(encodeContentLength, ecLevel, recognitionResult.EncodingName); BitList dataCodewords = new(); // Eci header if (vcStruct.IsContainECI && vcStruct.ECIHeader is { })
internal static EncodationStruct Encode(IEnumerable <byte> content, ErrorCorrectionLevel eclevel) { EncoderBase encoderBase = CreateEncoder(QRCodeConstantVariable.DefaultEncoding); BitList encodeContent = new BitList(content); int encodeContentLength = encodeContent.Count; VersionControlStruct vcStruct = VersionControl.InitialSetup(encodeContentLength, eclevel, QRCodeConstantVariable.DefaultEncoding); BitList dataCodewords = new BitList(); //Eci header if (vcStruct.IsContainECI && !(vcStruct.ECIHeader is null)) { dataCodewords.Add(vcStruct.ECIHeader); } //Header dataCodewords.Add(encoderBase.GetModeIndicator()); int numLetter = encodeContentLength >> 3; dataCodewords.Add(encoderBase.GetCharCountIndicator(numLetter, vcStruct.VersionDetail.Version)); //Data dataCodewords.Add(encodeContent); //Terminator Padding dataCodewords.TerminateBites(dataCodewords.Count, vcStruct.VersionDetail.NumDataBytes); int dataCodewordsCount = dataCodewords.Count; if ((dataCodewordsCount & 0x7) != 0) { throw new ArgumentException("data codewords is not byte sized."); } else if (dataCodewordsCount >> 3 != vcStruct.VersionDetail.NumDataBytes) { throw new ArgumentException("datacodewords num of bytes not equal to NumDataBytes for current version"); } var encStruct = new EncodationStruct(vcStruct) { DataCodewords = dataCodewords }; return(encStruct); }
public void Test_against_reference_implementation(int numDataBits, Mode mode, ErrorCorrectionLevel level, string encodingName) { VersionControlStruct vcStruct = VersionControl.InitialSetup(numDataBits, mode, level, encodingName); VersionCheckStatus checkStatus = VersionTest.VersionCheck(vcStruct.VersionDetail.Version, numDataBits, mode, level, encodingName); switch (checkStatus) { case VersionCheckStatus.LargerThanExpect: Assert.Fail("Version {0} size not enough", vcStruct.VersionDetail.Version); break; case VersionCheckStatus.SmallerThanExpect: Assert.Fail("Version{0}'s size too big", vcStruct.VersionDetail.Version); break; default: break; } }
private void PTest(int contentLength) { Stopwatch sw = new Stopwatch(); int timesofTest = 1000; string[] timeElapsed = new string[2]; sw.Start(); for (int i = 0; i < timesofTest; i++) { VersionControl.InitialSetup(contentLength, Mode.Alphanumeric, ErrorCorrectionLevel.H, QRCodeConstantVariable.DefaultEncoding); } sw.Stop(); timeElapsed[0] = sw.ElapsedMilliseconds.ToString(); sw.Reset(); QRCodeInternal qrInternal = new QRCodeInternal(); int byteLength = contentLength / 8; sw.Start(); for (int i = 0; i < timesofTest; i++) { EncoderInternal.initQRCode(byteLength, ErrorCorrectionLevelInternal.H, ZMode.ALPHANUMERIC, qrInternal); } sw.Stop(); timeElapsed[1] = sw.ElapsedMilliseconds.ToString(); Assert.Pass("VersionControl {0} Tests~ QrCode.Net: {1} ZXing: {2}", timesofTest, timeElapsed[0], timeElapsed[1]); }