From e1edc387da37adb1a6218670fe1efa5f3e023b57 Mon Sep 17 00:00:00 2001 From: yannickreiss Date: Sun, 22 Jun 2025 21:41:12 +0200 Subject: [PATCH] init --- .gitignore | 4 ++++ alire.toml | 12 ++++++++++++ spark.adc | 1 + spark_mode.gpr | 23 +++++++++++++++++++++++ src/logic.adb | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/logic.ads | 19 +++++++++++++++++++ src/spark_mode.adb | 15 +++++++++++++++ 7 files changed, 118 insertions(+) create mode 100644 .gitignore create mode 100644 alire.toml create mode 100644 spark.adc create mode 100644 spark_mode.gpr create mode 100644 src/logic.adb create mode 100644 src/logic.ads create mode 100644 src/spark_mode.adb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5866d7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/obj/ +/bin/ +/alire/ +/config/ diff --git a/alire.toml b/alire.toml new file mode 100644 index 0000000..77dbc4e --- /dev/null +++ b/alire.toml @@ -0,0 +1,12 @@ +name = "spark_mode" +description = "" +version = "0.1.0-dev" + +authors = ["Nicki"] +maintainers = ["Nicki "] +maintainers-logins = ["yannickreiss"] +licenses = "MIT OR Apache-2.0 WITH LLVM-exception" +website = "" +tags = [] + +executables = ["spark_mode"] diff --git a/spark.adc b/spark.adc new file mode 100644 index 0000000..c4a1e03 --- /dev/null +++ b/spark.adc @@ -0,0 +1 @@ +pragma SPARK_Mode (On); diff --git a/spark_mode.gpr b/spark_mode.gpr new file mode 100644 index 0000000..e226a97 --- /dev/null +++ b/spark_mode.gpr @@ -0,0 +1,23 @@ +with "config/spark_mode_config.gpr"; +project Spark_Mode is + + for Source_Dirs use ("src/", "config/"); + for Object_Dir use "obj/" & Spark_Mode_Config.Build_Profile; + for Create_Missing_Dirs use "True"; + for Exec_Dir use "bin"; + for Main use ("spark_mode.adb"); + + package Compiler is + for Default_Switches ("Ada") use Spark_Mode_Config.Ada_Compiler_Switches; + for Local_Configuration_Pragmas use "spark.adc"; + end Compiler; + + package Binder is + for Switches ("Ada") use ("-Es"); -- Symbolic traceback + end Binder; + + package Install is + for Artifacts (".") use ("share"); + end Install; + +end Spark_Mode; diff --git a/src/logic.adb b/src/logic.adb new file mode 100644 index 0000000..7bdec61 --- /dev/null +++ b/src/logic.adb @@ -0,0 +1,44 @@ +package body Logic is + + -- @name Step + -- @return + -- @parameter N:Natural + -- @parameter O:Natural + -- @description Do one calculation step and safe the result to O. + procedure Step (N : Natural; O : out Natural) is + + begin + + if N mod 2 = 0 then + O := N / 2; + else + O := 3 * N + 1; + end if; + + end Step; + + -- @name Row + -- @return + -- @parameter N:Natural,Final + -- @description Calculate full row for design. + procedure Row (N : Natural; Final : out Natural) is + Old : Natural := N; + Update : Natural; + begin + + while (Old < (Natural'Last / 3)) and (not (Old = 1)) loop + + Step (Old, Update); + Old := Update; + + end loop; + + if not (Old = 1) then + Old := 1; + end if; + + Final := Old; + + end Row; + +end Logic; diff --git a/src/logic.ads b/src/logic.ads new file mode 100644 index 0000000..1bf14a8 --- /dev/null +++ b/src/logic.ads @@ -0,0 +1,19 @@ +package Logic is + + -- @name Step + -- @return + -- @parameter N:Natural + -- @parameter O:Natural + -- @description Do one calculation step and safe the result to O. + procedure Step (N : Natural; O : out Natural) with + Depends => (O => N), Pre => (N < (Natural'Last / 3)); + + -- @name Row + -- @return + -- @parameter N:Natural,Final + -- @description Calculate full row for design. + procedure Row (N : Natural; Final : out Natural) with + Depends => (Final => N), Pre => (N < (Natural'Last / 3)), + Post => (Final = 1); + +end Logic; diff --git a/src/spark_mode.adb b/src/spark_mode.adb new file mode 100644 index 0000000..3dc4bbf --- /dev/null +++ b/src/spark_mode.adb @@ -0,0 +1,15 @@ +with Logic; use Logic; +with Ada.Text_IO; use Ada.Text_IO; + +procedure Spark_Mode is + + A, B : Natural; + +begin + + A := 8_400; + Row (A, B); + + Put_Line (B'Image); + +end Spark_Mode;