From mboxrd@z Thu Jan 1 00:00:00 1970 List-Id: Return-Path: Received: from localhost (localhost [127.0.0.1]) by mail.ignore.pl (Postfix) with ESMTP id C4B6A43618; Tue, 24 Feb 2026 08:56:47 +0000 (UTC) X-Virus-Scanned: Debian amavis at ignore.pl Received: from mail.ignore.pl ([127.0.0.1]) by localhost (geidontei.ignore.pl [127.0.0.1]) (amavis, port 10024) with ESMTP id iD_Kp5FGmpQZ; Tue, 24 Feb 2026 08:56:44 +0000 (UTC) Authentication-Results: mail.ignore.pl; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=S48XVwjD; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by mail.ignore.pl (Postfix) with ESMTPS id 66E5A435F7; Tue, 24 Feb 2026 08:56:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1771923404; x=1803459404; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=40O28ieaettvhnYnG+G5bj44Q7YtBMfpgZuMxPPm4dk=; b=S48XVwjD2x47+/4j27gHjuSr58BY6mbvTeqn19ePY7YHqlK4l0jD6n1W oUB9lLrZ+df81AGpBIsm6nAXHiwXHWAJkR3mjbeoZirEtbWhsW268xYaf xZ+DLCTgVpLQ91/VNtRDLCPeYNGEvpC2+zXOjCwkt7QMTT9AqvDP7Gu2r e3oE9n8+bveUQ27vm8jIGHfttBRdUpQ1yZuTCqTcvPZbFjZdZb+go2Xvk L3NdaMbBJaMRdfDEC4pwSAGJWD1XIOKNru3Jac67e1ZmTp36K8u/5q5ok oBpAbcMjdID+UwXytcDtJQTNHmb7E3iOhN8+7GKvtmJAlIL2Ia3w/dZwr g==; X-CSE-ConnectionGUID: awHBP5LnTX6gMVl8870zUQ== X-CSE-MsgGUID: EEtyd8RKSc+E5WQMWPstbQ== X-IronPort-AV: E=McAfee;i="6800,10657,11710"; a="83643596" X-IronPort-AV: E=Sophos;i="6.21,308,1763452800"; d="scan'208";a="83643596" Received: from fmviesa004.fm.intel.com ([10.60.135.144]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Feb 2026 00:56:40 -0800 X-CSE-ConnectionGUID: NYdFz9FHS3C+90Okwaf91Q== X-CSE-MsgGUID: fcmGyn4NQnOqirnuFzJx+g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,308,1763452800"; d="scan'208";a="219333826" Received: from hpe-dl385gen10.igk.intel.com ([10.91.240.117]) by fmviesa004.fm.intel.com with ESMTP; 24 Feb 2026 00:56:39 -0800 From: Jakub Slepecki To: patches@ignore.pl Cc: please@ignore.pl, Jakub Slepecki Subject: [PATCH what 1/3] what: add bits.b() for binary number "literals" Date: Tue, 24 Feb 2026 09:56:32 +0100 Message-ID: <20260224085635.319107-2-jakub.slepecki@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260224085635.319107-1-jakub.slepecki@intel.com> References: <20260224085635.319107-1-jakub.slepecki@intel.com> MIME-Version: 1.0 Organization: Intel Technology Poland sp. z o.o. - ul. Slowackiego 173, 80-298 Gdansk - KRS 101882 - NIP 957-07-52-316 Content-Transfer-Encoding: 8bit Good chunk of documentation uses the "1001b" notation. Lua does not support it, but we can leverage function calls syntax sugar to be somewhat similar to it. Signed-off-by: Jakub Slepecki --- spec/bits_spec.lua | 25 +++++++++++++++++++++++++ what/bits.lua | 20 ++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 spec/bits_spec.lua diff --git a/spec/bits_spec.lua b/spec/bits_spec.lua new file mode 100644 index 000000000000..931ce32048d7 --- /dev/null +++ b/spec/bits_spec.lua @@ -0,0 +1,25 @@ +local bits = require"what.bits" +local b = bits.b + + +describe("bits.b()", function() + describe("builds integers from", function() + it("some examples", function() + assert.are.equal(1, b"1") + assert.are.equal(3, b"11") + assert.are.equal(5, b"101") + assert.are.equal(15, b"1111") + assert.are.equal(0, b"0000") + assert.are.equal(37, b"100101") + end) + end) + + it("allows an empty string", function() + assert.are.equal(0, b"") + end) + + it("rejects malformed strings", function() + assert.is_nil(b"abc") + assert.is_nil(b"10a1") + end) +end) diff --git a/what/bits.lua b/what/bits.lua index c11571a725bd..440d5bacd36a 100644 --- a/what/bits.lua +++ b/what/bits.lua @@ -131,4 +131,24 @@ function bits.bit (nth) end +--- Build an integer based on a string containing a [[binary]] +--- representation of it, for example: +--- +--- bits.b"011" --> 3 +--- bits.b"101" --> 5 +function bits.b (binary) + if not binary:match"^[01]*$" then + return nil + end + local len = #binary + local val = 0 + local pos = binary:find"1" + while pos do + val = val + 2 ^ (len - pos) + pos = binary:find("1", pos + 1) + end + return math.tointeger(val) +end + + return bits -- 2.43.0